Javascript 大口喝,摩卡,看着别重新加载我的源文件

Javascript 大口喝,摩卡,看着别重新加载我的源文件,javascript,node.js,unit-testing,mocha.js,gulp,Javascript,Node.js,Unit Testing,Mocha.js,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工作,以帮助自动化一些单元测试。我有下面的吞咽文件

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']);
当我运行“GulpUnit”时,测试运行良好

当我运行“gulptest”时,测试运行,并且“watch”似乎正在工作。如果我对其中一个测试文件进行了更改,那么测试将正确地重新运行,并考虑到我在测试文件中所做的更改

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

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


感谢您帮助这位大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口大口

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

问题是当您通过watch运行测试时,nodejs中的require正在缓存src文件

我在测试文件中使用了以下函数来使src文件的缓存失效,以替换require

显然这样做很危险,请查看我文章底部的链接以了解更多信息。仅限开发使用;)

Coffeescript-模块-test.coffee

Javascript-module-test.js


请参阅此处了解更多信息:

我不想修改所有测试,所以在开始将测试文件传送到摩卡之前,我刚刚阻塞了此功能:

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文件夹为目标,但节点路径中没有任何内容

大口大口地说,它看起来像:

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

});

我觉得你的设置很好。您确定您的测试需要您编辑的文件(而不是它的副本)吗?是。测试需要正确的文件。记住,当我在没有“手表”的情况下运行“吞咽单元”时,效果非常好。当我使用mocha CLI运行测试时,它也可以正常运行。只有当测试自动重新运行时才会出现这种情况(源文件似乎被缓存),因为“watch”看到我的源文件发生了更改。我遇到了完全相同的问题(但jasmine,而不是mocha),有解决方案吗?我还没有找到解决方案。我目前没有使用手表。必须实际完成一些工作!:-)我只是尝试了一下,没有任何问题。我设置了我的
gulp.watch
,一切看起来都很好,然后我删除了一个src文件的内容,这些测试失败了。我错过什么了吗?谢谢!我也一直在思考这个问题。我还没有测试过这种方法,但它对我来说是有效的。此外,我还考虑以某种方式在所有测试之前使所有模块失效。我们也没有测试过这种方法。不管怎样,你的答案都能解决问题。再次感谢!
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];
        }
    });
}
gulp.task('test', function () {
    var mocha = require("gulp-mocha");
    freshFiles();
    gulp.src(testSources)
        .pipe(mocha({ reporter: 'spec', growl: 'true' }))
        .on('error', gutil.log);

});