Gulp 任务观察器在第一次通过时找到测试,但在后续执行中找不到

Gulp task watcher finds tests on first pass, but not subsequent executions

在 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

超级烦人,

但只需从观察者路径中删除“./”,如下所示:

gulp.task('watch-tests', function () {
    gulp.watch(['generators/**', 'test/**/*.js'], ['run-tests']);
});

确保路径在没有“./”的情况下工作,并且它可以工作任意多次。

发生的情况是,在您的代码(测试或被测试的实际代码)中的某处,当前工作目录被更改,并且下一个 运行 测试不再找到指定的测试文件。您无法从问题中的代码中看到这一点,我在您 link 的 github generator-office 项目评论中找到了它。

您可以通过插入

来检查
console.log(process.cwd());

进入您的测试任务并在第二个 运行.

上查看它的变化

现在您可以重写您的代码以不更改当前工作目录或始终重置它,但您也可以通过创建一个变量将 CWD 保存到(如果是任务定义则在外部)来在 gulpfile 中修复它。

var currentWorkingDirectory = process.cwd();

然后从

更改文件规范
gulp.src('test/*.js')

gulp.src(currentWorkingDirectory + '/test/*.js')

在你的测试任务中。 (监视任务不受工作目录变化的影响,可能是因为它会在启动时获取对文件的引用而不是再次扫描它们)