2014-02-20 11 views
5

Ich versuche, meine Tests laufen jedes Mal, wenn ich einige Dateien speichern. Hier ist die schluck Uhr:Wie benutze ich Jasmin mit gulp.watch?

gulp.task('jasmine', function() { 
gulp.src('spec/nodejs/*Spec.js') 
    .pipe(jasmine({verbose:true, includeStackTrace: true})); 
}); 
gulp.task('watch', function() { 
    gulp.watch(['app/*.js', 'app/!(embed)**/*.js','spec/nodejs/*.js'], ['jasmine']); 
}); 

zum Beispiel app testen/maps.js Ich erstelle eine spec/NodeJS/mapsSpec.js wie diese Datei:

'use strict'; 
var maps = require('../../app/maps'); 
describe('/maps related routes', function(){ 
    it('should ...', function(){...} 
... 

Wenn ich eine spec ändern Datei funktioniert alles gut, wenn ich app/maps.js Datei ändern die Änderung den Test auslösen. Wenn ich es erneut modifiziere, werden die Tests zwar manipuliert, aber die Änderungen werden nicht wirksam. Zum Beispiel, wenn ich ein console.log ('foo') ein zweites Mal hinzufüge, werde ich es nicht sehen, bis ich den Schluck-Watch neu starte und ihn wieder speichere. Also ist nur ein Jasminlauf ok wenn man es mit gulp.watch benutzt.

Ich denke, es ist, weil Require von Nodejs im Prozess Schluck zwischengespeichert wird. Also wie soll ich tun?

+0

Welche Datei werden Sie unter dem App-Ordner zu ändern. –

+0

die Landkarten-Datei (Ich habe die Frage bearbeitet) – toutpt

+0

Versuchen Sie, Ihre Überwachungsaufgabe neu zu schreiben: 'gulp.watch (['app/**/*. Js', '! **/einbetten/**'], ['jasmine "]);' –

Antwort

4

Ich nahm einen Blick auf den Code von schluck-Jasmin. Das Problem besteht darin, dass die einzige Datei aus dem Cache die Specs.js-Datei ist. Der Cache der Kinder (die erforderlichen zu testenden Dateien) werden nicht gelöscht.

Innerhalb der index.js von schluck-Jasmin ist eine Zeile, die den Cache löscht:

delete require.cache[require.resolve(path.resolve(file.path))]; 

Wenn Sie das nächste Codeblock vor dem Löschen setzen, werden Sie alle Cache Kinder löschen und wird es nach jedem Speichern der Datei korrekt ausgeführt werden.

var files = require.cache[require.resolve(path.resolve(file.path))]; 
if(typeof files !== 'undefined') { 
    for(var i in files.children) { 
     delete require.cache[ files.children[i].id ]; 
    } 
} 

Sie können dies in den node_modules ändern. Ich werde für eine Pull-Anfrage gehen, also vielleicht in naher Zukunft wird dies dauerhaft gelöst werden.

schrieb auch einen Beitrag darüber auf: http://navelpluisje.nl/entry/fix-cache-problem-jasmine-tests-with-gulp

+0

Lassen Sie sehen, wann es zusammengeführt wird. – toutpt

1

Ich habe keine Lösung für dieses Problem gefunden, aber Sie können es über die Gulp-Shell-Aufgabe umgehen.

npm install gulp-shell --save-dev 

dann

var shell = require('gulp-shell'); 
... 
gulp.task('jasmine', function() { 
gulp.src('spec/nodejs/*Spec.js') 
    .pipe(shell('minijasminenode spec/*Spec.js')); 
}); 

Sie werden auch Jasmin als direkte Abhängigkeit installiert sein (schlucke-Jasmin verwendet minijasminenode)

+0

Gute Arbeit, aber ich verstehe nicht, warum ich Minijasmine Knoten brauchen würde. Ich glaube, wir können './node_modules/.bin/jasmine-node' verwenden. – toutpt