在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
答案 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']);
});
确保路径无法使用" ./"它可以根据你的需要工作多次。