Gulp,Mocha,观看不重新加载我的源文件

时间:2014-03-10 02:41:06

标签: javascript node.js unit-testing mocha 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']);

当我运行'gulp unit'时,测试运行正常。

当我运行'gulp test'时,测试运行,看起来'watch'正在运行。如果我对其中一个测试文件进行了更改,则测试会重新运行,并考虑到我在测试文件中所做的更改。

如果我对源文件进行了更改,测试也会重新运行,但它们不会针对源文件的更新版本运行。

我的想法是,不知何故,源文件正在被缓存,但我找不到任何其他似乎遇到此问题或找到解决方案的人。

感谢您帮助这个Gulp / Node / Mocha新手!

2 个答案:

答案 0 :(得分:7)

我有同样的问题,但我找到了解决方法,

问题是当你通过监视运行测试时,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();
    ...

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();
    ...

请点击此处了解详情:node.js require() cache - possible to invalidate?

答案 1 :(得分:1)

我不想修改所有测试,所以我在开始将测试文件传输到mocha之前就把这个函数搞砸了:

function freshFiles(chunk, enc, cb){
    _.forOwn(require.cache, function(value, key){
        if (key.indexOf('lib') !== -1 && key.indexOf('node_modules')===-1){
            delete require.cache[key];
        }
    });
}

这是我的lib文件夹,但在node_modules路径中没有任何内容。

在gulp看起来像:

gulp.task('test', function () {
    var mocha = require("gulp-mocha");
    freshFiles();
    gulp.src(testSources)
        .pipe(mocha({ reporter: 'spec', growl: 'true' }))
        .on('error', gutil.log);

});