【发布时间】:2020-09-27 07:36:43
【问题描述】:
我正在使用 flutter_test 在我的 Flutter 应用程序上执行一些小部件测试。 它基本上可以正常工作,除非我的测试小部件是消费者。
在这里,我基本上有一个 DeviceProvider 对象,它将一个对象包装到一个 ChangeNotifier 中,以便将更新正确地传播给消费者。
为了能够将它与 WidgetTester 一起使用,我将我的 Consumer 小部件放在了一个 ChangeNotifierProvider 中,它实例化了一个 DeviceProvider。
_pumpTestableWidgetWithProvider(WidgetTester tester, Widget widget) async {
DeviceProvider device = DeviceProvider(Device());
await tester.pumpWidget(ChangeNotifierProvider(
create: (context) => device,
child: MaterialApp(home: widget)));
return device;
}
然后,我使用刚刚抽的 WidgetTester 并检查其中是否有一些文本字段。
testWidgets("Infos - default device infos", (WidgetTester tester) async {
DeviceProvider device = await _pumpTestableWidgetWithProvider(
tester, DeviceInfos());
expect(find.text("Battery state: "), findsOneWidget);
});
它返回一个错误,告诉我“即使在小部件树被释放后,计时器仍处于挂起状态”。看日志,这个定时器对应一个用DeviceProvider创建的_FakeTimer。因此,我尝试使用
手动处置提供程序device.dispose();
但现在,我收到一条错误消息,告诉我“A DeviceProvider was used after being placed。”
有没有人可以帮我解决?
【问题讨论】:
-
我遇到了类似的问题。尝试测试使用提供程序的小部件,我在第二次测试时收到此错误...
-
您能否分享一个完整的 sn-p 以重现该错误?
标签: flutter flutter-test flutter-provider