如何解决Flutter - 检查是否出现 TextFormField 错误文本的小部件测试结果不一致
我目前正在 Flutter 上进行小部件测试,以确定每当用户提交带有空电子邮件字段的表单时,错误文本“请输入电子邮件!”是否会显示在我的登录/注册页面中。该项目遵循称为 Stacked(由 FilledStacks 提供)的 MVVM 风格架构。
这是我用于登录页面的 TextFormField 验证器函数:
/// Email Validator
String validateEmail(String email) {
email = email.trim(); // trim leading/trailing whitespace
if (email.isEmpty) {
return 'Please enter an email!';
} else {
return null;
}
}
这是我的登录验证器测试函数 (PASSES):
testWidgets('Textfield should display warning string for empty email.',(WidgetTester tester) async {
// Arrange
await tester.pumpWidget(createWidgetForTesting(LoginView()));
final emailFieldFinder = find.widgetWithText(TextFormField,'Email');
final buttonFinder = find.widgetWithText(ElevatedButton,'Login');
final emailErrorFinder = find.text('Please enter an email!');
// Act
await tester.enterText(emailFieldFinder,'');
await tester.tap(buttonFinder);
await tester.pump(const Duration(milliseconds: 100)); // add delay
// Assert
expect(emailErrorFinder,findsOneWidget);
});
现在我为一个注册页面复制了相同的验证器功能,它具有以下测试功能(FAILS):
testWidgets('Textfield should display warning string for empty email.',(WidgetTester tester) async {
// Arrange
await tester.pumpWidget(createWidgetForTesting(RegisterView()));
final emailFieldFinder = find.widgetWithText(TextFormField,'Email');
final buttonFinder = find.widgetWithText(ElevatedButton,'Register');
final emailErrorFinder = find.text('Please enter an email!');
// Act
await tester.enterText(emailFieldFinder,'');
await tester.tap(buttonFinder);
await tester.pump(const Duration(milliseconds: 100)); // add delay
// Assert
expect(emailErrorFinder,findsOneWidget);
});
我验证了所有小部件查找器(错误文本查找器除外)都可以找到它们各自的小部件(TextFormField、ElevatedButton 等),并且我还验证了验证器是否正常工作,因为当我手动测试登录和注册页面时,每当我尝试提交空字段时,都会相应地显示附加到 TextFormFields 的错误消息。那么让我困惑的是测试,为什么只有一个页面(LoginPage)通过了widget测试,而另一个页面(RegisterPage)却没有?
作为参考,LoginPage 是此 Flutter 应用程序的根或起始屏幕/小部件。我也尝试过更改起始屏幕,但它产生相同的结果(LoginPage 通过而 RegisterPage 失败)而不是反转测试结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。