Тайм-аут теста водителя флаттера - PullRequest
1 голос
/ 17 марта 2020

Я новичок в тестировании драйверов Flutter, и у меня есть проблема, что тесты всегда останавливаются (через 30 секунд) в ожидании появления виджетов. Мой основной класс только проверяет, не является ли пользователь Firebase нулевым. Если пользователь вошел в систему, он показывает панель инструментов, в противном случае экран входа. Во время выполнения проверки отображается SplashScreen. Тест "проверка работоспособности драйвера флаттера" завершается нормально.

Я пробовал find.byValueKey("auth_screen") вместо find.byType("AuthScreen"), он выдает ту же проблему.

Журнал ошибок:

VMServiceFlutterDriver: Connected to Flutter application.
00:01 +0: rendin app check flutter driver health

HealthStatus.ok

00:01 +1: rendin app Check login screen widgets

Splash screen

VMServiceFlutterDriver: waitFor message is taking a long time to complete...
VMServiceFlutterDriver: waitFor message is taking a long time to complete...
00:31 +1 -1: rendin app Check login screen widgets [E]

  TimeoutException after 0:00:30.000000: Test timed out after 30 seconds.

    Bad state: The client closed with pending request "ext.flutter.driver".

Вот мой тестовый код:

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

import 'package:test/test.dart';

void main() {
  group('app', () {
    FlutterDriver driver;

    // Connect to the Flutter driver before running any tests.
    setUpAll(() async {
      driver = await FlutterDriver.connect();
    });

    test('check flutter driver health', () async {
      Health health = await driver.checkHealth();
      print(health.status);
    });

    test("Check login screen", () async {

      await driver.waitFor(find.byType("AuthScreen")).then((value) async {
        print("Auth screen");
      });
    });

    // Close the connection to the driver after the tests have completed.
    tearDownAll(() async {
      if (driver != null) {
        driver.close();
      }
    });
  });
}

Часть кода futureBuilder в основном классе:

builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) {
       return SplashScreen(key: Key("splashScreen2"));
    } else if (snapshot.hasData) {
       return DashboardScreen();
    } else {
       return AuthScreen();
    }
},

и часть кода AuthScreen ():

class AuthScreen extends StatelessWidget {
  static const routeName = '/auth';

  @override
  Widget build(BuildContext context) {
    final deviceSize = MediaQuery.of(context).size;
    return Scaffold(
      key: Key("auth_screen"),
      backgroundColor: Colors.white,

1 Ответ

1 голос
/ 24 апреля 2020

test() имеет параметр с именем timeout

Вот демонстрация:

test("Check login screen", () async {

  await driver.waitFor(find.byType("AuthScreen")).then((value) async {
    print("Auth screen");
  });
}, timeout:Timeout(Duration(seconds:999999)));

, значение тайм-аута по умолчанию = 30 секунд;

...