我尝试使用以下gulpfile.js来监视更改、重新启动服务器和重新运行我的测试(cucumber.js)。更改黄瓜规格或我的应用程序中的文件都会成功触发该过程。但是,规格的更新内容将被忽略!就像规范被缓存了一样。如何确保执行最新的规范?
文件内容:
"use strict";
var gulp = require( "gulp" );
var cucumber = require( "gulp-cucumber" );
var watch = require( "gulp-watch" );
var server = require( 'gulp-develop-server' );
gulp.task( "cukes", function( done ) {
return gulp.src( "specs/**/*.feature" ).pipe( cucumber( {
"steps" : "specs/steps/**/*.js,support/*_hooks.js",
"format" : "pretty"
} ) );
} );
gulp.task( "test", [ "server:start", "cukes" ] );
gulp.task( "server:start", function() {
server.listen( { path: "./index.js" } );
} );
gulp.task( "watch", [ "server:start" ], function() {
watch( [ "lib/**/*", "specs/**/*" ], function() {
server.restart( function() {
setTimeout( function() { gulp.start( "cukes" ); }, 500 );
} );
} );
} );发布于 2015-05-24 06:16:42
节点模块被缓存在require.cache中,因此您需要重置缓存以不包含cucumber所需的内容。您可以在调用watch()之前保存Object.keys(require.cache),然后在启动"cukes“任务之前从require.cache中删除任何新的密钥。像这样的东西可能会起作用:
gulp.task( "watch", [ "server:start" ], function() { var originalKeys = Object.keys(require.cache); watch( [ "lib/**/*", "specs/**/*" ], function() { server.restart( function() { var newKeys = Object.keys(require.cache); while (newKeys.length > originalKeys.length) { delete require.cache[newKeys.pop()]; } setTimeout( function() { gulp.start( "cukes" ); }, 500 ); } ); } ); } );
(通过pull请求将类似这样的内容添加到gulp-cucumber中可能也是一个好主意。)
https://stackoverflow.com/questions/29931664
复制相似问题