2014-03-03 8 views
7

Ich habe eine Bibliothek, die CanvasElement verwendet und daher von dart:html abhängig ist. Jetzt versuche ich Komponententests für dieselbe Bibliothek zu schreiben. Allerdings bekomme ich folgende Fehlermeldung beim Versuch, sie laufen:Dart-Unit-Test-Klassen in einer HTML-abhängigen Bibliothek

The built-in library 'dart:html' is not available on the stand-alone VM. 

Hier ist, wie mein Test-Datei wie folgt aussieht:

library PiflexUmlTest; 

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

part 'src/geometry/vector_test.dart'; 

main() { 
    testVector(); 
} 

ich es versagt verstehen, weil Bibliothek selbst in lib.dart Datei a hat Linie besagt:

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

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

obwohl Bibliothek selbst darauf angewiesen ist, ich bin eine Klasse zu testen, nicht versuchen, die anyth hat mit HTML zu tun haben.

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

Antwort

5

Sie können browserbasierte Komponententests mit content_shell (kopfloser Browser) ausführen.

Der Ordner, in dem Sie DartEditor installiert haben (darteditor/chrom/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

<!doctype html> 
<html> 
    <body> 
    <script src="packages/unittest/test_controller.js"></script> 
    <script type="application/dart" src="browser_tests.dart"></script> <!-- your unit tests --> 
    <script src="packages/browser/dart.js"></script>  </body> 
</html> 

Dart Einheit

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

main() { 
    useHtmlConfiguration(); 

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

Vielleicht Overkill für Ihren Anwendungsfall testet, aber immer noch eine Lösung.

EDIT
Es gibt auch eine Diskussion über dieses Problem los: https://groups.google.com/a/dartlang.org/forum/#!topic/misc/pacB66gnVcg

+0

content_shell und polymer.dart Wurf Ausnahme für mich, über CORS resctricion „Importierte Ressource von Herkunft 'file: //' wurde blockiert von Laden von Cross-Origin Resource Sharing-Richtlinie " – estin

+1

Sorry, ich bin vergessen --allow-Datei-Zugriff-von-Dateien – estin

Verwandte Themen