小编Hil*_*tor的帖子

如何让小部件测试等到 Bloc 更新状态?

我有一个EmailScreen(有状态的小部件),它有一个文本输入和一个按钮。仅当输入有效的电子邮件时该按钮才会启用。

\n\n

我正在使用 Bloc,我的屏幕上有InitialEmailStateValidEmailInputState,并且当我运行该应用程序时它工作正常。

\n\n

在我的小部件测试中,在 bloc 有机会更新状态之前,第二个期望失败了:

\n\n
\n  testWidgets(\'when valid email is input, button is enabled\', (tester) async {\n    const validEmail = \'email@provider.com\';\n\n    emailBloc.listen((event) {\n      print(\'NEW EVENT: \' + event.toString());\n    });\n\n    await bootUpWidget(tester, emailScreen);\n\n    final BottomButton button = tester.widget(\n        find.widgetWithText(BottomButton, \'CONTINUE\'));\n\n    expect(button.enabled, isFalse);\n\n    await tester.enterText(find.byType(TextInputScreen), validEmail);\n    await tester.pumpAndSettle();\n\n    expect(button.enabled, isTrue);\n  });\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我得到的输出:

\n\n
NEW EVENT: InitialEmailState\n\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1 EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK \xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\nThe following TestFailure object was thrown running a test:\n …
Run Code Online (Sandbox Code Playgroud)

testing flutter bloc

6
推荐指数
1
解决办法
3100
查看次数

标签 统计

bloc ×1

flutter ×1

testing ×1