2014-02-20 66 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