Как решить Не найдено: ошибка «dart: ui» при выполнении интеграционных тестов на Flutter - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть приложение, оно очень простое и имеет только один виджет.Он работает нормально, однако, когда я запускаю интеграционный тест, вызывая:

$ flutter drive --target=test_driver/app.dart 

Я получаю следующую ошибку:

 file:///Users/myuser/flutter/packages/flutter_test/lib/src/accessibility.dart:8:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui;
       ^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/binding.dart:8:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui;
       ^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/matchers.dart:8:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui;
       ^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/matchers.dart:9:8: Error: Not found: 'dart:ui'
import 'dart:ui';
       ^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/test_pointer.dart:12:1: Error: Not found: 'dart:ui'
export 'dart:ui' show Offset;
^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/binding.dart:8:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui show window;
       ^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/box.dart:6:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui show lerpDouble;
       ^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/debug_overflow_indicator.dart:6:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui;
       ^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/editable.dart:8:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui show TextBox;
       ^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/error.dart:5:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui show Paragraph, ParagraphBuilder, ParagraphConstraints, ParagraphStyle, TextStyle;
       ^
Stopping application instance.
Driver tests failed: 254

Обратите внимание, что при запуске приложения из Android Studio оноработает успешно.Но когда я запускаю из терминала команду, указанную выше, приложение показывает белый экран, и оно не перемещается оттуда, пока не получит ошибку на своем терминале.

Предполагая, что это проблема с путём, например, test_driver нетнайти флаттер пакеты, такие как dart: ui, как я могу убедиться, что test_driver знает, где находится dart: ui?

Ответы [ 4 ]

0 голосов
/ 24 июля 2019

Убедитесь, что для импорта установлено следующее:

import 'package:test/test.dart';

вместо этого:

import 'package:flutter_test/flutter_test.dart';
0 голосов
/ 30 сентября 2018

Я получал эти ошибки, потому что пытался импортировать виджет в файл test_driver.Я также получил ту же ошибку, если я пытаюсь использовать find.byWidget.

Я пытался импортировать виджет или использовать find.byWidget, потому что я хотел проверить существование виджета на экране.

Эти ошибки очень похожи на

Встроенная библиотека 'dart: ui' недоступна на автономной виртуальной машине.

Затем, чтобы проверить наличие виджета на экране в файле test_driverЯ должен был использовать find.byKeyValue.Например, учитывая следующий фиктивный виджет, определенный в файле моего приложения:

class MyDummyWidget extends StatelessWidget {

  MyDummyWidget(): super(key: new Key('MyDummyWidget'));

  @override
  Widget build(BuildContext context) {
    return Center();
  }
}

Чтобы проверить, отображается ли он на экране, я определяю следующий тест в test_driver:

void main() {
  group('My tests', () {
    FlutterDriver driver;
    SerializableFinder myDummyWidget = find.byValueKey('MyDummyWidget');

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

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

    test('check if MyDummyWidget is being displayed', () async {
      await driver.waitFor(myDummyWidget);
    });
  });
}

Там, где определение ключа является обязательным в первом файле, а затем, Find.byValueKey и драйверы await являются основными в тестовом файле.

0 голосов
/ 17 июля 2019

Удалить все импорта в пакет: flutter / ... из кода тестового драйвера, например:

import 'package: flutter / widgets.dart';

0 голосов
/ 25 сентября 2018

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

Прочитайте https://flutter.io/cookbook/testing/integration-test-introduction/так как это дает пример интеграционных тестов с отправной точкой приложения, которое позволяет вам запускать код установки перед тем, как будут запущены ваши реальные тесты драйверов, если это то, что вы хотите сделать.В противном случае не используйте значения ключей, которые используют константы из вашего основного кода (как упомянуто здесь http://cogitas.net/write-integration-test-flutter/).

...