Как я могу проверить сообщение об ошибке проверки поля в тесте виджета Flutter? - PullRequest
1 голос
/ 16 октября 2019

Я пишу тест виджета для формы Flutter и хочу убедиться, что после отправки формы проверка завершается неудачно, и errorText для одного из полей отображается и соответствует ожидаемому.

код для поля выглядит следующим образом:

Form(key: _formKey, ...
  TextFormField(validator: validateEmail, ...)

Для тестового утверждения я пробовал такие вещи, как

expect(find.text('Please fill in your email.'), findsOneWidget);

Безуспешно. Надеясь, что кто-то может направить меня в правильном направлении.

1 Ответ

0 голосов
/ 17 октября 2019

Я воссоздал ваш случай и смог проверить встроенное сообщение об ошибке. Идея состоит в том, чтобы добавить задержку в 1 секунду, прежде чем мы сможем проверить утверждение. Вот что я сделал:

main.dart код для отображения textformfield и проверка электронной почты при нажатии кнопки Send:

TextFormField(
            decoration: new InputDecoration(hintText: 'Email ID'),
            keyboardType: TextInputType.emailAddress,
            maxLength: 32,
            validator: validateEmail,
            onSaved: (String val) {
              email = val;
            }),

validateEmail фрагмент метода:

if (value.length == 0) {
      return "Email is Required";
    } else if(!regExp.hasMatch(value)){
      return "Invalid Email";
    }else {
      return null;
    }

Проверка виджета для проверки встроенного сообщения об ошибке для поля электронной почты:

void main() {
  testWidgets('validate email inline error message',
          (WidgetTester tester) async {

        await tester.pumpWidget(MyApp());

        final buttonFinder = find.text('Send');
        final emailErrorFinder = find.text('Email is Required');

        await tester.tap(buttonFinder);
        print('button tapped');
        await tester.pump(const Duration(milliseconds: 100)); // add delay
            expect(emailErrorFinder, findsOneWidget);
        print('validated email inline error');
      });
}

Результат теста:

enter image description here

Надеждаэто отвечает на ваш вопрос.

...