2013-04-26 5 views
6

Ich benutze Grunt, PhantomJS und das "Watch" -Plugin, um meine QNit-Tests während meiner Entwicklung (getrennt von CI) auszuführen. Ich möchte mich gerne auf ein bestimmtes QUnit-Modul konzentrieren, während ich an dem Code arbeite, auf den sich die Tests dieses Moduls konzentrieren. Wenn ich QNit im Browser ausführe, kann ich ein Modul angeben (im Gegensatz zu allen Tests).Angeben von Qnit-Modul bei Ausführung mit Grunt

Die Frage ist also, kann ich die Grunt Qnit Aufgabe nur ein bestimmtes Modul ausführen? Ich denke, ein Befehlszeilenargument, so dass ich muß nicht, wie meine Gruntfile, etwas zu ändern:

~$ grunt qunit --module="test this stuff, test that stuff" 

UPDATE

Um klar zu sein, was ich Module ausgeführt werden soll erstellt in ein Test-Suite mit QUnit module() Methode:

module("group a"); 
test("a basic test example", function() { 
    ok(true, "this test is fine"); 
}); 
test("a basic test example 2", function() { 
    ok(true, "this test is fine"); 
}); 

module("group b"); 
test("a basic test example 3", function() { 
    ok(true, "this test is fine"); 
}); 
test("a basic test example 4", function() { 
    ok(true, "this test is fine"); 
}); 

in dem obigen Beispiel dieser Code alle in einer Test-Suite ist, aber in der resultierenden hTML-Testdatei bekomme ich eine Drop-Down entweder Modul "Gruppe a" laufen oder Modul "Gruppe b" (über die Benutzeroberfläche von QUnit). Was ich will ist in der Lage zu sein, programmatisch zu spezifizieren, dass ich ein spezifisches Modul durch die grunt qunit Aufgabe laufen lassen möchte.

Antwort

0

Wenn Sie Ihre Konfiguration für Grunzen-QUnit wie folgt aufgebaut:

grunt.initConfig({ 
    qunit: { 
    module1: { 
     options: { 
     urls: [ 
     'http://localhost:8000/test/module1/foo.html', 
     'http://localhost:8000/test/module1/bar.html', 
     ] 
     } 
    }, 
    module2: { 
     options: { 
     urls: [ 
     'http://localhost:8000/test/module2/foo.html', 
     'http://localhost:8000/test/module2/bar.html', 
     ] 
     } 
    } 
    } 
    ... 

Sie können ein einzelnes Modul wie grunt qunit:module1 laufen

+0

Dies stimmt zwar, ich hatte gehofft, etwas mehr Generika zu finden. Grundsätzlich, wenn ich ein Modul zu meiner Testsuite hinzufüge, möchte ich nicht ein neues Modulziel dafür erstellen müssen. Danke für das Posten. – jakerella

+0

Nun, Sie können eine Aufgabe erstellen, die in './Test' sucht und ein Modul für jedes Unterverzeichnis konfiguriert, diese dann zur Ausführung in die Warteschlange stellt und ein Modulargument zum Filtern verwendet. – Stuart

+0

Ja, aber ich beziehe mich eher darauf, QNits 'Modul's ausführen zu können. Was Sie hier haben, ist die Erstellung von verschiedenen HTML-Test-Suites, die in dieser Rolle agieren. Was ich will, ist, dass ich das Modul ausführen kann, das in der Testsuite deklariert ist, und nicht eine neu erstellte HTML-Datei. – jakerella

0

Ich denke, eine praktikable Abhilfe ein Modul Filteroption definieren könnte, und wenn es existiert, hängen Sie es an die URLs an. So etwas wie dies in der Gruntfile.js

var moduleFilter = ''; 
if (grunt.option('module')) { 
    moduleFilter = '?module=' + grunt.option('module') 
} 

dann mit ihm:

grunt.initConfig({ 
    qunit: { 
    options: { 
     ... 
     urls: [ 
      'http://localhost:3000/qunit' + moduleFilter 
     ] 
    } 
    } 
}); 

Beachten Sie, dass dies nur für ein Modul funktioniert. Vielleicht (aber nicht getestet) können Sie den filter Query-Parameter anstelle des Moduls verwenden und Ihre Module so benennen, dass sie dem Filter entsprechen, damit Sie sie gruppieren können.

Hinweis: Das Ausführen mehrerer Module wird von QNit nicht unterstützt.

Referenzen:

+0

Das sieht sicherlich nach einer praktikableren Lösung aus, ich werde es ausprobieren, wenn ich wieder bei diesem Projekt bin. – jakerella