在gulp任务中出现奇怪行为。我有一个任务,每次我手动运行它时,它都能很好地运行我的测试:
gulp.task('run-tests', function () {
return gulp.src('./test/**/*.js', { read: false })
.pipe(mocha({ reporter: 'spec' }));
});
因此,我设置了一个监视器,以便在任何源代码或测试运行时自动运行它们:
gulp.task('watch-tests', function () {
gulp.watch(['./generators/**', './test/**/*.js'], ['run-tests']);
});
第一个问题是当任务开始时测试没有运行…当我启动它时,我想要第一次通过。
但是更大的问题是,当我通过更新一个文件来触发监视器时,它正确地执行了我所有的测试,但在随后的每次时间里,它都找不到我的任何测试…从下面的输出中可以看到。什么好主意吗?非常奇怪…
$ gulp watch-tests
[16:55:15] Using gulpfile ~/repos/../gulpfile.js
[16:55:15] Starting 'watch-tests'...
[16:55:15] Finished 'watch-tests' after 14 ms
[16:55:19] Starting 'run-tests'...
app
server.js
✓ creates server.js in src/server
✓ set port number in server.js
package.json
✓ creates package.json in root
✓ sets correct values in package.json
static files created in src/public
✓ created public/index.html
✓ created public/content/site.css
6 passing (75ms)
[16:55:20] Finished 'run-tests' after 805 ms
[16:55:38] Starting 'run-tests'...
0 passing (0ms)
[16:55:38] Finished 'run-tests' after 4.14 ms
发生的情况是,在代码(测试或实际测试代码)的某个地方,当前工作目录被更改,并且下一次运行的测试不再找到指定的测试文件。你不能从你的问题中的代码中看到这一点,我在你在评论中链接到的github生成器-office项目中找到了它。
可以通过插入
来检查。console.log(process.cwd());
放到测试任务中,并在第二次运行时看到它的变化。
现在你可以重写你的代码,不改变当前的工作目录或总是重置它,但你也可以在你的gulpfile中通过创建一个变量来保存CWD(在任务定义之外)来修复它。
var currentWorkingDirectory = process.cwd();
然后从
更改文件规格gulp.src('test/*.js')
gulp.src(currentWorkingDirectory + '/test/*.js')
在您的测试任务中。(watch任务不受工作目录更改的影响,可能是因为它会在启动时获取对文件的引用,而不会再次扫描它们)
这太烦人了,
,但只需删除"。
gulp.task('watch-tests', function () {
gulp.watch(['generators/**', 'test/**/*.js'], ['run-tests']);
});
确保没有"的路径工作。