Простое интеграционное тестирование с использованием Flutter - PullRequest
0 голосов
/ 22 мая 2018

Тестирование флаттера.Я должен провести интеграционное тестирование, так же как Espresso и Selenium разрешают тестирование пользовательского интерфейса, основываясь на моем чтении, я понял, что тестирование Flutter UI потребует настройки интеграционной модели.В Selenium findById и Espresso мы можем использовать R.id.unique_element_id.Я пытался понять, как уникальный идентификатор ссылается на виджеты во Flutter, но не понимаю, пожалуйста, я только что поднял его сегодня.Любой простой тест для такой формы

mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Text(
              'You have pushed the button this many times:',
            ),
            new TextFormField(
              decoration: new InputDecoration(
                  labelText: 'Enter your username'
              ),
            ),
            new TextFormField(
              decoration: new InputDecoration(
                  labelText: 'Enter your phone number'
              ),
              keyboardType: TextInputType.number,
            ),

            new Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],

Настройте тестовый файл следующим образом

    import 'package:flutter_driver/flutter_driver.dart';
    import 'package:test/test.dart';

    void main() {
      FlutterDriver driver;

      setUpAll(() async {
        driver = await FlutterDriver.connect();
      });

      tearDownAll(() async {
        if(driver != null){
          driver.close();
        }
      });


test('tap on the button, verify result', () async {
    final SerializableFinder username = find.byValueKey('usernametextfield');
    expect(username, isNotNull);
    //insert value into username

    final SerializableFinder phonenumber = find.byValueKey('phone');
    expect(phonenumber, isNotNull);
    //insert value into phonenumber
});

Пожалуйста, как мне создать такой tetscase и запустить.комментарии //insert value into username и //insert value into phonenumber являются реальными тестовыми примерами, которые я хочу завершить.

1 Ответ

0 голосов
/ 24 мая 2019

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

По сути, вам нужно определить свойство key для виджета TextFormField, которое поможет вам уникально идентифицировать этот виджет, а затем вы сможете выполнять над ним действия.Пример:

new TextFormField(
              key: Key('userNameTextField'),
              decoration: new InputDecoration(
                  labelText: 'Enter your username'
              ),
            ),

и затем в своем тестовом файле вы напишите это:

test('tap on the button, verify result', () async {
    final SerializableFinder username = find.byValueKey('userNameTextField');
    expect(username, isNotNull);
    await driver.waitFor(username);
    await driver.enterText('Test');

  // repeat above for `phoneNumber` widget.

    final SerializableFinder phonenumber = find.byValueKey('phone');
    expect(phonenumber, isNotNull);
    //insert value into phonenumber
});
...