【问题标题】:How to use jasmine with gulp.watch如何将茉莉花与 gulp.watch 一起使用
【发布时间】:2014-02-20 14:52:46
【问题描述】:

我正在尝试在每次保存一些文件时运行我的测试。这是 gulp 手表:

gulp.task('jasmine', function() {
 gulp.src('spec/nodejs/*Spec.js')
  .pipe(jasmine({verbose:true, includeStackTrace: true}));
});
gulp.task('watch', function () {
  gulp.watch(['app/*.js', 'app/!(embed)**/*.js','spec/nodejs/*.js'], ['jasmine']);
});

为了测试 app/maps.js,我正在创建一个 spec/nodejs/mapsSpec.js 文件,如下所示:

'use strict';
var maps = require('../../app/maps');
describe('/maps related routes', function(){
  it('should ...', function(){...}
...

如果我更改了规范文件,一切正常,如果我修改 app/maps.js 文件,更改会触发测试。如果我再次对其进行修改,则会触发测试,但修改不会生效。例如,如果我第二次添加一个 console.log('foo') ,我将不会看到它,直到我重新启动 gulp watch 并再次保存它。因此,与 gulp.watch 一起使用时,只需运行一次 jasmine 即可。

我猜这是因为 nodejs 在 gulp 进程中缓存了 require 。那我该怎么办呢?

【问题讨论】:

  • 你修改的是app文件夹下的哪个文件。
  • 地图文件(我已经编辑了问题)
  • 尝试重写你的手表任务:gulp.watch(['app/**/*.js', '!**/embed/**'], ['jasmine']);
  • 我认为 jasmine 的约定是“-spec”,尽管您的“Spec”格式可能没有区别。
  • 对不起,问题不是关于如何触发测试,而是为什么对应用程序的修改不生效,一旦运行测试似乎不可能让它们生效。

标签: node.js gulp jasmine-node


【解决方案1】:

我看了一下gulp-jasmine的代码。问题是缓存中的唯一文件是 Specs.js 文件。孩子的缓存(需要测试的文件)没有被清除。

gulp-jasmine 的 index.js 中有一行删除缓存:

delete require.cache[require.resolve(path.resolve(file.path))];

如果你把下一个代码块放在删除之前,你会删除所有子缓存,并且每次保存文件后它都会正确运行。

var files = require.cache[require.resolve(path.resolve(file.path))];
if( typeof files !== 'undefined' ) {
    for( var i in files.children ) {
        delete require.cache[ files.children[i].id ];
    }
}

您可以在 node_modules 中更改它。 我会提出一个拉取请求,所以也许在不久的将来这个问题会得到永久解决。

还写了一篇关于它的帖子:http://navelpluisje.nl/entry/fix-cache-problem-jasmine-tests-with-gulp

【讨论】:

  • 看看什么时候合并。
【解决方案2】:

我还没有找到解决此问题的方法,但您可以通过 gulp-shell 任务解决它。

npm install gulp-shell --save-dev

然后

var shell = require('gulp-shell');
...
gulp.task('jasmine', function() {
 gulp.src('spec/nodejs/*Spec.js')
  .pipe(shell('minijasminenode spec/*Spec.js'));
});

您还需要安装 jasmine 作为直接依赖项(gulp-jasmine 使用 minijasminenode)

【讨论】:

  • 很好的解决方法,但我不明白为什么我需要 minijasmine 节点。我相信我们可以使用'./node_modules/.bin/jasmine-node'。
猜你喜欢
  • 1970-01-01
  • 2023-01-24
  • 2014-12-12
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 2015-07-26
  • 1970-01-01
相关资源
最近更新 更多