首页 > 解决方案 > 未找到与此方法调用的参数匹配的存根:导航器

问题描述

我正在尝试模拟 AutoRouteObserver() 类来测试我的项目中的导航,但是当我在 navigatorObservers 参数中使用模拟实例时,出现以下错误:

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following MissingStubError was thrown building AutoRouteNavigator(state:
_AutoRouteNavigatorState#0b446):
'navigator'
No stub was found which matches the arguments of this method call:
navigator

Add a stub for this method using Mockito's 'when' API, or generate the mock for
MockNavigationHistoryObserver with 'returnNullOnMissingStub: true'.

The relevant error-causing widget was:
  AutoRouteNavigator 

这是我的代码:

 void main() async {
  var authManagerMock = getAndRegisterAuthManagerMock();
  var mockRepository = getAndRegisterRepositoryMock();
  final _appRouter = AppRouterAutoRoute(authGuard: AuthGuard());
  var mockAutoRouterObserver = MockAutoRouteObserver();

  Widget makeTestableWidget() {
    when(authManagerMock.isLoggedIn()).thenAnswer((realInvocation) => false);
    return MaterialApp.router(
        routerDelegate: AutoRouterDelegate(_appRouter, navigatorObservers: () => [mockAutoRouterObserver]),
        routeInformationParser: _appRouter.defaultRouteParser());
  }
testWidgets('Tapping forgot password text', (WidgetTester tester) async {
    await tester.pumpWidget(makeTestableWidget());
    await tester.pump();
    Finder forgetPasswordButtonFinder = find.byKey(Key('forget-password-button'));
    expect(find.byKey(Key('forget-password-button')), findsOneWidget);

    await tester.tap(forgetPasswordButtonFinder);
    await tester.pumpAndSettle();
    expect(find.byKey(Key('forget-password-button')), findsNothing);
    expect(find.byKey(Key('submit')), findsOneWidget);
    verify(mockAutoRouterObserver.didPush(any, any));
  });
}

标签: flutterdartmockitoflutter-test

解决方案


推荐阅读