1

我正在实现一个小部件测试,其中用户登录并在成功验证后导航到下一个视图。我查看了几篇帖子,所有帖子都建议设置一个模拟类型,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>'.

在此处输入图像描述

我已验证在视图中正确启动了身份验证过程,并且正在传递凭据。除了验证是否已推送到下一个视图之外,所有测试均通过。

有谁知道验证路线已被推送的正确方法?

谢谢!

4

0 回答 0