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