我正在实现一个小部件测试,其中用户登录并在成功验证后导航到下一个视图。我查看了几篇帖子,所有帖子都建议设置一个模拟类型,NavigatorObserver
然后使用它来验证下一个视图是否已推送。在我的小部件测试中,我将模拟设置如下:
class MockNavigatorObserver extends Mock implements NavigatorObserver {}
我的设置实例化模拟如下:
final mockObserver = MockNavigatorObserver();
在我的testWidgets
功能中,我有以下内容:
await tester.pumpWidget(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => SomeProvider()),
ChangeNotifierProvider(create: (_) => SomeOtherProvider())
],
child: MaterialApp(
home: LoginView(),
navigatorObservers: [mockObserver],
)));
这是执行身份验证过程的代码:
await tester.enterText(usernameTextField, 'username');
await tester.enterText(passwordTextField, 'password');
await tester.pumpAndSettle();
await tester.tap(submitButtonFinder);
await tester.pumpAndSettle();
verify(mockObserver.didPush(any, any)); // causes build failure
到目前为止,我发现的每一篇文章都建议使用它来验证是否发生了推送:
verify(mockObserver.didPush(any!, any));
但是,这无法在我的代码中构建。调用中的第一个any
参数verify
无法使用消息构建
The argument type 'Null' can't be assigned to the parameter type 'Route<dynamic>'.
我已验证在视图中正确启动了身份验证过程,并且正在传递凭据。除了验证是否已推送到下一个视图之外,所有测试均通过。
有谁知道验证路线已被推送的正确方法?
谢谢!