2013-04-25 6 views
25

Ich spiele mit Karma Test Runner (http://karma-runner.github.io/0.8/index.html) mit qunit (http://qunitjs.com). Ich habe erfolgreich einfache Tests (100% JavaScript) erstellt und ausgeführt, aber jetzt versuche ich HTML-Fixtures zu verwenden, um Code zu testen, der mit DOM-Knoten interagiert. Ich bin in der Lage, diese Vorrichtungen zu laden, indem Sie sie in „Dateien“ auf diese Weise erklärt:Wie kann ich HTML-Fixtures mit Karma-Test-Runner mit Qunit verwenden?

{pattern: 'fixtures/myfixture.html', watched: true, served: true, included: false} 

es von Karma Server bedient wird, aber ich verstehe nicht, wie kann ich auf seinen DOM zugreifen :(

Nehmen wir an, meine Leuchte ist eine einfache hTML-Datei das folgende Markup enthält:

<div id="container">hello world</div> 

Wie kann ich einen Test schreiben, der (die div) an diesen Knoten zugreifen können das „Dokument“ wird die zugehörige " context.html "Datei unter" statisch "Ordner soweit ich weiß ... wo sind die HTM L meiner Befestigung ??

+0

hier meine Antwort Check: http://stackoverflow.com/questions/15214760/unit-testing- angularjs-directive-with-templateurl/16528985 # 16528985 –

Antwort

23

Ich benutze AngularJS nicht ... löste ich, indem ich jasmine-jquery annahm: https://github.com/velesin/jasmine-jquery (ich benutze Jasmin nur für die Befestigungen, meine Tests werden noch mit qunit geschrieben). In meiner Konfigurationsdatei habe ich folgende:

frameworks = ['qunit', 'jasmine']; 

    files = [ 

     JASMINE, 
     JASMINE_ADAPTER, 
     QUNIT, 
     QUNIT_ADAPTER, 

     // dependencies 
     {pattern: 'src/main/webapp/js/libs/jquery/jquery-1.8.3.js', watched: false, served: true, included: true}, 
     {pattern: 'src/test/js/lib/jasmine-jquery.js', watched: false, served: true, included: true}, 

     // fixtures 
     {pattern: 'src/test/js/**/*.html', watched: true, served: true, included: false}, 
     {pattern: 'src/test/js/**/*.json', watched: true, served: true, included: false}, 
     {pattern: 'src/test/js/**/*.xml', watched: true, served: true, included: false}, 

     // files to test 
     {pattern: 'src/test/js/**/*.js', watched: true, served: true, included: true} 
    ]; 

dann in meinen Test-Dateien:

module("TestSuiteName", { 
    setup: function() { 
     var f = jasmine.getFixtures(); 
     f.fixturesPath = 'base'; 
     f.load('src/test/js/TestFixture.html'); 
    }, 
    teardown: function() { 
     var f = jasmine.getFixtures(); 
     f.cleanUp(); 
     f.clearCache(); 
    } 
}); 
+0

Guter Job Kumpel. Müssen Sie trotzdem JASMINE und JASMINE_ADAPTER in der Config haben? – NickL

+8

Um es für mich arbeiten zu lassen, musste ich "Präprozessoren: {'**/*. Html': []}" hinzufügen. Dies um den html2js Preprocessor, der standardmäßig für mich in Karma 0 war, zu entfernen.10 –

+0

[Related Github Problem Diskussion über die Präprozessoren in Karma] (https://github.com/karma-runner/karma/issues/788). – jfroom

8

Wenn Sie AngularJS verwenden, können Sie den Präprozessor html2js verwenden. Ein Beispiel, wie man das macht, ist https://github.com/vojtajina/ng-directive-testing.

Diese HTML-Dateien werden von Karma geliefert, aber sie sind nicht in der Seite enthalten, also müssten Sie sie holen - wahrscheinlich durch xhr-Anfrage.

Hier ein ähnlicher Präprozessor ist, die HTML-Datei in einen JS-String (nicht dicht zu Angular) konvertiert: https://github.com/karma-runner/karma-html2js-preprocessor Sie können sehen, wie es in dem e2e Test verwenden: https://github.com/karma-runner/karma-html2js-preprocessor/tree/master/e2e-test

HINWEIS: Diese html2js Präprozessor ist nicht Teil von Karma 0.8 und Plugins funktionieren nur mit Karma 0.9+ (derzeit im Kanarienvogel-Kanal), also musst du Kanarienvogel verwenden (enthält viele Änderungen ;-)) ...

+0

Ich bin auch wirklich daran interessiert, das DOM mit Karma zu testen. Wird dies in zukünftigen Versionen verfügbar sein oder sollte ich nach Workarounds suchen? Ich werde wahrscheinlich Angular dafür nicht verwenden ... – zigomir

+0

Verwenden Sie einfach kanarische Freisetzung von Karma (es wird schließlich stabil werden ;-) und verwenden Sie das Karma-html2js-Präprozessor-Plugin, das AngularJS nicht eng ist. – Vojta

+1

Wie installiere ich das Canary Release auf npm? Entschuldigung für die dumme Frage. –