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

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新手!

Aze*_*ian 7

我有同样的问题,但我发现了一个修复,

问题是当你通过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 - 可能无效?