flutter - 如何为 Flutter 中的 Snack Bar 编写一个简单的测试?

标签 flutter snackbar

我很惊讶之前似乎没有人问过这个问题,这意味着答案可能很明显,但我有一个带有文本字段和按钮的屏幕。用户在文本字段中输入他们的电子邮件。然后按下按钮查看电子邮件是否在数据库中。然后程序会显示带有“成功”文本或“失败”文本(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);
当我在模拟器中使用该应用程序时,一切正常,但在测试中,最后一行抛出一个错误,指出它找不到匹配的小部件。我错过了什么?

最佳答案

您是否将测试小部件包装在 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

关于flutter - 如何为 Flutter 中的 Snack Bar 编写一个简单的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61646891/

相关文章:

flutter - 有没有办法在 Flutter 上添加两个不同颜色的 Iphone x SafeArea

flutter : Alert Dialog hide by keyboard

android - 制作 "slide from bottom"按钮(类似于snackbar)(Android)

flutter - 如何向 Snackbar 添加边距或填充?

android - 来自另一个 fragment 的 Snackbar 回调

flutter - 补间动画 flutter

flutter - 如何将提供者的数据设置为Flutter中存储在SharedPreferences中的数据?

flutter - 尝试显示对话框时如何修复 "Navigator operation requested with a context that does not include a Navigator"

Angular Material SnackBar 和自定义 ErrorHandler 来通知错误