2014-02-20 67 views
5

我試圖讓我的測試運行,每次我保存一些文件。下面是一口手錶:如何使用茉莉花與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']); 
}); 

爲了測試示例應用程序/ maps.js我創建一個投機/的NodeJS/mapsSpec.js文件是這樣的:

​​

如果我更改規格文件一切正常,如果我修改app/maps.js文件,更改會觸發測試。如果我再次修改它,則測試會被激活,但修改不會生效。例如,如果我第二次添加console.log('foo'),我將不會再看到它,直到我重新啓動gulp手錶並再次保存它。所以,只有一個茉莉花運行與gulp.watch一起使用時可以。

我想這是因爲需求被吞噬過程中的nodejs緩存。那我該怎麼辦?

+0

哪個文件是你的應用程序文件夾下修改:

上也寫了一篇關於它。 –

+0

地圖文件(我編輯了問題) – toutpt

+0

嘗試重寫您的手錶任務:'gulp.watch(['app/**/*。js','!**/embed/**'],['jasmine ']);' –

回答

4

我看了看一飲而盡,茉莉的代碼。問題是來自緩存的唯一文件是Specs.js文件。子項的緩存(要測試的必需文件)未被清除。

一飲而盡,茉莉的index.js內的行已刪除緩存:

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

如果你把下一個代碼塊之前的刪除,您將刪除所有孩子們的緩存和將它每次保存文件後都要正確運行。

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 ]; 
    } 
} 

可以在node_modules改變這種情況。 我會去請求一個拉,所以也許在不久的將來這將永久解決。 http://navelpluisje.nl/entry/fix-cache-problem-jasmine-tests-with-gulp

+0

讓我們看看它什麼時候會合並。 – toutpt

1

我還沒有找到解決此問題的方法,但您可以通過gulp-shell任務解決此問題。

npm install gulp-shell --save-dev 

然後

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

你還需要安裝一個直接依賴茉莉(一飲而盡,茉莉花使用minijasminenode)

+0

不錯的工作,但我不明白爲什麼我需要minijasmine節點。我相信我們可以使用'./node_modules/.bin/jasmine-node'。 – toutpt