2012-04-10 4 views
9

Diese Frage basiert wahrscheinlich auf meinem Mangel an früheren Erfahrungen mit node.js, aber ich hatte gehofft, Jasmine-Node würde mich einfach meine Jasmin-Spezifikationen von der Kommandozeile ausführen lassen.Warum nimmt Jasmine-Node mein Hilfsskript nicht auf?

TestHelper.js:

var helper_func = function() { 
    console.log("IN HELPER FUNC"); 
}; 

my_test.spec.js:

describe ('Example Test', function() { 
    it ('should use the helper function', function() { 
    helper_func(); 
    expect(true).toBe(true); 
    }); 
}); 

Das sind die einzigen zwei Dateien im Verzeichnis. Dann, wenn ich tun:

jasmine-node . 

ich

ReferenceError: helper_func is not defined 

Ich bin sicher, die Antwort ist einfach, aber ich habe keine super-einfache Intros finden, oder irgendetwas offensichtlich auf Github . Jeder Rat oder jede Hilfe würde sehr geschätzt werden!

Danke!

Antwort

16

Im Knoten ist alles Namespace, es ist js-Datei. Um die Funktion aufrufbar von anderen Dateien zu machen, TestHelper.js ändern wie folgt aussehen:

var helper_func = function() { 
    console.log("IN HELPER FUNC"); 
}; 
// exports is the "magic" variable that other files can read 
exports.helper_func = helper_func; 

Und dann my_test.spec.js ändern wie folgt aussehen:

// include the helpers and get a reference to it's exports variable 
var helpers = require('./TestHelpers'); 

describe ('Example Test', function() { 
    it ('should use the helper function', function() { 
    helpers.helper_func(); // note the change here too 
    expect(true).toBe(true); 
    }); 
}); 

und schließlich Ich glaube, jasmine-node . wird jede Datei im Verzeichnis sequenziell ausführen - aber Sie müssen die Helfer nicht ausführen. Stattdessen könnten Sie sie in ein anderes Verzeichnis verschieben (und ändern Sie die ./ in require() in den richtigen Pfad), oder Sie können einfach jasmine-node *.spec.js ausführen.

+0

Vielen Dank an sie zu machen! Also ... um gierig zu sein, kann das irgendwie konvertiert werden, um auf Jasmine-Node zu laufen und SpecRunner.html zu benutzen? Wenn ich die HTML-Version verwende, bekomme ich "Exporte ist nicht definiert" und "benötigt ist nicht definiert". – Hoopes

+0

Ich habe es nicht benutzt, aber ich denke, http://requirejs.org/ wird helfen. –

+1

Alternativ können Sie einfach etwas tun, wenn (erfordern) {... [Dateien laden] ...} 'und' if (! Exportiert) {var exports = window.helpers = {}} 'für eine einfache Lösung –

2

Sie nicht unbedingt benötigen, um Ihre Hilfsskript in der Spezifikation (Prüfung) Include-Datei, wenn Sie die Jasmin config als:

{ 
    "spec_dir": "spec", 
    "spec_files": [ 
    "**/*[sS]pec.js" 
    ], 
    "helpers": [ 
    "helpers/**/*.js" 
    ], 
    "stopSpecOnExpectationFailure": false, 
    "random": false 
} 

Alles im Helfer/Ordner vor den Spec-Dateien ausgeführt wird. In den Helferdateien muss so etwas wie deine Funktion enthalten sein.

beforeAll(function(){ 
    this.helper_func = function() { 
    console.log("IN HELPER FUNC"); 
    }; 
}); 

Sie werden dann in der Lage sein, Referenzen in der Spec-Dateien

Verwandte Themen