【问题标题】:How to write a simple test for a Snack Bar in Flutter?如何在 Flutter 中为 Snack Bar 编写一个简单的测试?
【发布时间】:2020-08-22 02:32:32
【问题描述】:

我很惊讶以前似乎没有人问过这个问题,这意味着答案可能很明显,但我有一个带有文本字段和按钮的屏幕。用户在文本字段中输入他们的电子邮件。然后按下按钮查看电子邮件是否在数据库中。然后程序会显示一个带有“成功”文本或“失败”文本(持续 2 秒)的快餐栏。

这是我的代码(5 行):

await driver.enterText(field, 'wrongemail@email.com');

var btn = find.widgetWithText(RaisedButton, 'SEND MY PASSWORD');

await driver.tap(btn);

await driver.pump();

expect(find.text( 'E-mail address not found!'), findsOneWidget);

当我在模拟器中使用该应用程序时,一切都很好,但在测试中最后一行抛出一个错误,说它找不到匹配的小部件。我错过了什么?

【问题讨论】:

    标签: flutter snackbar


    【解决方案1】:

    您是否将测试小部件包装在 Scaffold 中?只有当 Scaffold 是调用 SnackBar 的小部件的祖先时,才能显示 SnackBar。

    例子:

    void main() {
      testWidgets('SnackBar control test', (WidgetTester tester) async {
        const String helloSnackBar = 'Hello SnackBar';
        const Key tapTarget = Key('tap-target');
        await tester.pumpWidget(MaterialApp(
          home: Scaffold(
            body: Builder(
              builder: (BuildContext context) {
                return GestureDetector(
                  onTap: () {
                    Scaffold.of(context).showSnackBar(const SnackBar(
                      content: Text(helloSnackBar),
                      duration: Duration(seconds: 2),
                    ));
                  },
                  behavior: HitTestBehavior.opaque,
                  child: Container(
                    height: 100.0,
                    width: 100.0,
                    key: tapTarget,
                  ),
                );
              }
            ),
          ),
        ));
        expect(find.text(helloSnackBar), findsNothing);
        await tester.tap(find.byKey(tapTarget));
        expect(find.text(helloSnackBar), findsNothing);
        await tester.pump(); // schedule animation
        expect(find.text(helloSnackBar), findsOneWidget);
      });
    

    发件人:https://github.com/flutter/flutter/blob/master/packages/flutter/test/material/snack_bar_test.dart

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      相关资源
      最近更新 更多