Kev*_*vin 14 javascript unit-testing mocha.js node.js gulp
我试图让gulp工作以帮助自动化一些单元测试.我有以下gulp文件.
var gulp = require('gulp'),
mocha = require('gulp-mocha');
gulp.task('unit', function() {
return gulp.src('test/unit/**/*.js')
.pipe(mocha({ reporter: 'spec' }))
.on('error', handleError);
});
gulp.task('watch', function() {
gulp.watch(['src/**/*.js', 'test/unit/**/*.js'], ['unit']);
});
gulp.task('test', ['unit', 'watch']);
Run Code Online (Sandbox Code Playgroud)
当我运行'gulp unit'时,测试运行正常.
当我运行'gulp test'时,测试运行,看起来'watch'正在运行.如果我对其中一个测试文件进行了更改,则测试会重新运行,并考虑我在测试文件中所做的更改.
如果我对源文件进行了更改,测试也会重新运行,但它们不会针对源文件的更新版本运行.
我的想法是,不知何故,源文件正在缓存,但我找不到任何似乎遇到此问题或找到解决方案的人.
感谢您帮助这个Gulp/Node/Mocha新手!
我有同样的问题,但我发现了一个修复,
问题是当你通过watch运行测试时,nodejs中的require会缓存你的src文件
我在我的测试文件中使用了以下函数来使src文件的缓存无效,替换为require.
显然这样做可能很危险,请查看我帖子底部的链接以获取更多信息.仅限开发用途;)
Coffeescript - module-test.coffee
nocache = (module) ->
delete require.cache[require.resolve(module)]
return require(module)
Module = nocache("../module")
describe "Module Test Suite", () ->
newModule = new Module();
...
Run Code Online (Sandbox Code Playgroud)
Javascript - module-test.js
var Module, nocache;
nocache = function(module) {
delete require.cache[require.resolve(module)];
return require(module);
};
Module = nocache("../src/module");
describe("Module Test Suite", function () {
newModule = new Module();
...
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此处:node.js require()cache - 可能无效?