Gulp任务监视程序在第一次执行时发现测试,而不是在后续执行时发现测试



在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']);
});

确保没有"的路径工作。

相关内容

最新更新