mockito 我应该如何在Flutter中测试Navigator.pushNamed()?

jmp7cifd  于 2023-01-26  发布在  Flutter
关注(0)|答案(3)|浏览(182)

我进行了一项测试,尝试观察应用从page1.dart导航到page2.dartNavigator的行为(推)然后返回使用Mockito包中的verify,我可以成功地验证推送行为在我不使用pushNamed()时是否有效。但是,在我将项目更改为使用Named Route之后,我无法找到正确的方法来实现模拟和测试导航。
有没有一种正确的方法来检查调用了导航器?或者有没有一种推荐的方法来模拟和替换navigator
编辑:我找到了一个flutter库Mockingjay来模拟导航器。

brgchamk

brgchamk1#

我找到了一个flutter库Mockingjay来模拟航海家。
这里是他们GitHub页面上的一个测试导航器的例子。

void main() {
  testWidgets('pushes SettingsPage when TextButton is tapped', (tester) async {
    final navigator = MockNavigator();
    when(() => navigator.push(any())).thenAnswer((_) async {});

    await tester.pumpWidget(
      MaterialApp(
        home: MockNavigatorProvider(
          navigator: navigator,
          child: const MyHomePage(),
        ),
      ),
    );

    await tester.tap(find.byType(TextButton));

    verify(
      () => navigator.push(any(that: isRoute<void>(whereName: equals('/settings')))),
    ).called(1);
  });
}
x6492ojm

x6492ojm2#

您可以在MaterialApp中定义routes

routes: {
    // When navigating to the "/" route, build the FirstScreen widget.
    '/': (context) => const FirstScreen(),
    // When navigating to the "/second" route, build the SecondScreen widget.
    '/second': (context) => const SecondScreen(),
  },

然后使用Navigator推送到您的目的地:
Navigator.pushNamed(context, '/second');
有关更多详细信息,请查看Navigate with named routes.上的Flutter文档

v9tzhpje

v9tzhpje3#

OnPressed:() {
     Navigator.push( context,
       MaterialPageRoute(
         builder: (context) => NewScreen()
       )
      );
    },

相关问题