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

时间:2015-08-20 20:57:38

标签: gulp mocha

在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

2 个答案:

答案 0 :(得分:1)

当您的代码中的某个地方(测试或正在测试的实际代码)发生变化时,当前工作目录会发生变化,下一轮测试不再能够找到指定的测试文件。您无法从问题中的代码中看到这一点,我在评论中链接到的github Here项目中找到了它。

您可以通过插入

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

进入测试任务并在第二次运行时看到它发生变化。

现在您可以重写代码以不更改当前工作目录或始终重置它,但您也可以通过创建变量将CWD保存到(在任务定义之外)来修复gulp文件。

var currentWorkingDirectory = process.cwd();

然后从

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

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

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

答案 1 :(得分:0)

太烦人了,

但只需删除" ./"从观察者的路径,像这样:

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

确保路径无法使用" ./"它可以根据你的需要工作多次。