如何用gulp.watch使用茉莉花

我试图让我的testing运行,每次我保存一些文件。 这是一口气手表:

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

testing例如app / maps.js我创build一个spec / nodejs / mapsSpec.js文件,如下所示:

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

如果我更改一个spec文件,一切运行良好,如果我修改app / maps.js文件,更改将触发testing。 如果我再次修改testing是激活的,但修改不起作用。 例如,如果我第二次添加一个console.log('foo'),我将不会看到它,直到我重新启动gulp手表并再次保存它。 所以只有一个茉莉花运行是可以用gulp.watch使用它。

我想这是因为需求被吞噬过程中的nodejscaching。 那我该怎么办?

我看了一下gulp-jasmine的代码。 问题是从caching中唯一的文件是Specs.js文件。 孩子的caching(需要testing的文件)不会被清除。

在gulp-jasmine的index.js中是删除caching的行:

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

如果在删除之前放置下一个代码块,则会删除所有子级caching,并且每次保存文件后都会正确运行。

 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

我还没有find解决这个问题,但你可以通过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')); }); 

你还需要安装茉莉花作为直接依赖(gulp-jasmine使用minijasminenode)