【问题标题】:Flutter testing WillPopScope with back button使用后退按钮颤振测试 WillPopScope
【发布时间】:2021-03-22 04:12:33
【问题描述】:

在我的主页小部件上,当用户点击系统后退按钮时,它会通过 WillPopScope 显示一个确认对话框小部件。 我想测试这个对话框,但我不知道如何按下测试文件上的后退按钮。

【问题讨论】:

    标签: flutter testing flutter-test


    【解决方案1】:

    我遇到了同样的问题,但我的应用程序中没有返回按钮。我想测试android系统的后退按钮。我就是这样做的。也许对遇到和我一样问题的人有帮助。

    testWidgets("test onWillPop",(WidgetTester tester) async {
        bool willPopCalled = false;
        await tester.pumpWidget(
          MaterialApp(
            home: Scaffold(
              body: WillPopScope(
                onWillPop: () async {
                  willPopCalled = true;
                  return false;
                },
                child: Container(),
              ),
            ),
          ),
        );
    
        final dynamic widgetsAppState = tester.state(find.byType(WidgetsApp));
        await widgetsAppState.didPopRoute();
        await tester.pump();
    
        expect(willPopCalled, true);
    });
    

    灵感来自:https://github.com/flutter/flutter/blob/master/packages/flutter/test/material/will_pop_test.dart

    【讨论】:

    • 为什么不试试这个expect(await widgetsAppState.didPopRoute(), isTrue);呢?
    • 这是个人喜好的情况,我个人从未测试过Flutter框架本身的功能。我编写的代码 sn-p 只是如何触发后退按钮的一个示例。在正常情况下,您在源项目中定义了您的小部件,并且您希望按下后退按钮时会发生一些事情。我只会断言可疑的结果。
    【解决方案2】:

    我不知道如何按下测试文件上的后退按钮。

    这将帮助您查看应用栏(应用顶部)上的后退按钮。它将允许您通过 appbar 查看返回按钮

    return WillPopScope(
      onWillPop: _onWillPop,
      child: Scaffold(
        appBar: AppBar(
          title: Text("Title"),
          centerTitle: true,
          leading: IconButton(
            icon: Icon(Icons.arrow_back, color: Colors.black),
            onPressed: () => _onWillPop(),
          ),
        ),
        body: Body(),
      ),
    );
    

    _onWillPop 将成为您问题的“确认对话框小部件”。

    【讨论】:

      【解决方案3】:

      显然,您无法在测试中访问Navigator。所以我的解决方案是在抽水小部件中的某处包含BackButton,然后像这样弹出页面:

      await tester.pumpWidget(MaterialApp(
        home: Scaffold(
          body: Container(
            child: BackButton(),
          ),
        ),
      ));
      
      ...
      
      await tester.pageBack();
      

      【讨论】:

        猜你喜欢
        • 2020-02-27
        • 1970-01-01
        • 2021-01-19
        • 2022-09-26
        • 2020-06-02
        • 1970-01-01
        • 2019-07-23
        • 2019-10-29
        • 2019-04-28
        相关资源
        最近更新 更多