8 Stimmen

Dart-Unit-Test-Klassen in einer HTML-abhängigen Bibliothek

Ich habe eine Bibliothek, die CanvasElement verwendet und daher von dart:html abhängig ist. Jetzt versuche ich, Unit-Tests für dieselbe Bibliothek zu schreiben. Allerdings erhalte ich den folgenden Fehler beim Versuch, sie auszuführen:

Die eingebaute Bibliothek 'dart:html' ist im eigenständigen VM nicht verfügbar.

So sieht meine Testdatei aus:

library PiflexUmlTest;

import 'package:PiflexUml/lib.dart';
import 'package:unittest/unittest.dart';

part 'src/geometry/vector_test.dart';

main () {
  testVector();
}

Ich verstehe, dass es fehlschlägt, weil die Bibliothek selbst in der Datei lib.dart eine Zeile hat, die besagt:

library PiflexUml;
// ....
import 'dart:html';

part "blahblah.dart";
part "something_else.dart"
// ....

Auch wenn die Bibliothek selbst davon abhängig ist, versuche ich nicht, eine Klasse zu testen, die etwas mit HTML zu tun hat.

Was sind meine Lösungen hier? Gibt es eine Möglichkeit, nur die Klassen zu importieren, die ich testen möchte, ohne die gesamte Bibliothek zu importieren? Oder muss ich meine Bibliothek in einen HTML-abhängigen Teil und einen nicht-HTML-abhängigen Teil aufteilen?

5voto

Günter Zöchbauer Punkte 549460

Sie könnten browserbasierte Unit-Tests mit content_shell (headless browser) ausführen.

Der Ordner, in dem Sie DartEditor installiert haben (darteditor/chromium/download_contentshell.sh), enthält eine Skriptdatei zum Herunterladen des Teils, der content_shell enthält.

Sie benötigen eine HTML-Datei, die von content_shell ausgeführt wird und die Tests ausführt. Die HTML-Datei könnte so aussehen

Dart Unit-Tests

import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';

main() {
  useHtmlConfiguration();

  test('Testbereich', () {
    ...
  });
}

Vielleicht überdimensioniert für Ihren Anwendungsfall, aber dennoch eine Lösung.

BEARBEITEN
Es findet auch eine Diskussion zu diesem Problem statt: https://groups.google.com/a/dartlang.org/forum/#!topic/misc/pacB66gnVcg

1voto

Jeff Punkte 5386

Dies scheint in neueren Versionen des Testpakets behoben zu sein. Es gibt einen neuen Parameter '--platform', der einen Browser als Wert akzeptiert, also:

pub run test --platform chrome

Wird Ihre Tests zu JavaScript kompilieren und sie auf Chrome ausführen.

Sie können auch die @TestOn-Annotation oder den testOn-Parameter für test() oder group() verwenden, um 'vm' oder 'browser' anzugeben, wenn Sie eine Bibliothek schreiben, die an beiden Standorten funktionieren soll.

Siehe https://pub.dartlang.org/packages/test#browservm-hybrid-tests

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X