web-dev-qa-db-fra.com

Comment résoudre Not found: Erreur «Dart: ui» lors de l'exécution des tests d'intégration sur Flutter

J'ai une application, c'est très simple et je n'ai qu'un widget. Cela fonctionne bien, cependant, lorsque je lance le test d'intégration en appelant:

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

J'obtiens l'erreur suivante:

 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

Notez que lorsque j'exécute l'application à partir de Android Studio, cela fonctionne correctement. Mais lorsque j'exécute à partir du terminal à l'aide de la commande citée ci-dessus, l'application affiche un écran blanc et ne bouge pas de là jusqu'à ce que j'obtienne l'erreur sur mon terminal.

En supposant que c'est un problème de chemin, comme test_driver ne trouvant pas de paquets flottants comme Dart: ui, comment puis-je m'assurer que test_driver sait où se trouve Dart: ui?

8
RobertoAllende

Les tests d'intégration ne peuvent avoir aucune importation vers votre code d'application principal ou un autre code de flutter qui s'exécute dans l'application - sinon ils échoueront avec votre erreur vue.

Lisez https://flutter.io/cookbook/testing/integration-test-introduction/ car cela donne un exemple de tests d'intégration avec un point de départ d'application qui vous permet d'exécuter le code d'installation avant vos tests de pilotes réels s'exécutent si c'est ce que vous cherchez à faire. Sinon, n'utilisez pas de valeurs clés qui utilisent des constantes de votre code principal (comme mentionné ici http://cogitas.net/write-integration-test-flutter/ ).

6
Chris

J'obtenais ces erreurs parce que j'essayais d'importer un widget sur un fichier test_driver. J'ai également eu la même erreur si j'essaie d'utiliser find.byWidget.

J'essayais d'importer un widget ou d'utiliser find.byWidget parce que je voulais vérifier l'existence d'un widget sur un écran.

Ces erreurs sont à peu près similaires à

La bibliothèque intégrée "Dart: ui" n'est pas disponible sur la machine virtuelle autonome.

Ensuite, afin de vérifier l'existence d'un widget à l'écran dans un fichier test_driver, j'ai dû utiliser find.byKeyValue. Par exemple, étant donné le widget factice suivant, défini dans un fichier dans mon application:

class MyDummyWidget extends StatelessWidget {

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

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

Pour vérifier s'il est affiché à l'écran, je définis le test suivant dans le 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);
    });
  });
}

Lorsque la définition de clé est celle requise dans le premier fichier, puis, les find.byValueKey et attendent les pilotes sont les éléments essentiels dans le fichier de test.

2
RobertoAllende

Assurez-vous que l'importation est définie sur ceci:

import 'package:test/test.Dart';

au lieu de cela:

import 'package:flutter_test/flutter_test.Dart';
1
Umair Adil

Supprimez toutes les importations dans le package: flutter/... du code du pilote de test, comme:

import 'package: flutter/widgets.Dart';

0
Roger Gusmao