Bri*_*ald 8 javascript node.js gulp
在我的gulp构建中,我想在我的服务器单元测试失败的情况下"中止"构建过程,但我不知道如何实现这一点.
目前,我正在使用node的request模块来运行一些服务器端单元测试,如下所示:
gulp.task("run-server-tests", function(){
var serverTestUrl = "http://myurl"; // returns test results in json format
request(serverTestUrl, function (error, response, body) {
var responseData = JSON.parse(body);
if(responseData.isSuccess){
console.log(responseData.message);
// nice! continue with rest of build (js, css tasks, etc.)
}
else {
open(serverTestUrl + "&render"); // show unit test failures
// err.... gulp.abortProcessing(); ????
}
});
});
Run Code Online (Sandbox Code Playgroud)
================================================== ============
**更新
在马丁和尼克的有用回应之后,我将我的构建剥离到最基本的例子,我可以想出两个建议,其中:
这是我更新的gulpfile.js:
var gulp = require("gulp");
var plugins = require('gulp-load-plugins')();
var Q = require("q");
gulp.task("task-1-option-1", function(callback){
plugins.util.log("task 1 running");
callback("unit test failed, stop build"); // let's just assume the unit tests fail
});
gulp.task("task-1-option-2", function(callback){
plugins.util.log("task 1 running");
var deferred = Q.defer();
setTimeout(function(){
deferred.reject("unit test failed, stop build"); // again, let's assume the unit tests fail
}, 2000);
return deferred.promise;
});
gulp.task("task-2-option-1", ["task-1-option-1"], function(){
// if this runs, the build didn't abort as expected
plugins.util.log("task 2 running");
});
gulp.task("task-2-option-2", ["task-1-option-2"], function(){
// if this runs, the build didn't abort as expected
plugins.util.log("task 2 running");
});
// trigger option-1 (Nick's suggestion)
gulp.task("option-1", ["task-1-option-1", "task-2-option-1"]);
// trigger option-2 (Martin's suggestion)
gulp.task("option-2", ["task-1-option-2", "task-2-option-2"]);
Run Code Online (Sandbox Code Playgroud)
================================================== ==============
问题在于,虽然这两种方法似乎都"中止"了构建,但它们都会导致gulp在终端中抛出"硬错误"(cygwin).我想知道这是不是因为我在Windows上运行这些测试,因为从我有限的经验来看,所有节点/ gulp似乎在Windows上为我打破了.
这是我为每项任务收到的输出.首先,回调选项:
$ gulp option-1
[10:45:32] Using gulpfile C:\users\bfitzgerald\desktop\gulp-test\gulpfile.js
[10:45:32] Starting 'task-1-option-1'...
[10:45:32] task 1 running
[10:45:32] 'task-1-option-1' errored after 79 ms
[10:45:32] Error: unit test failed, stop build
at formatError (C:\Users\bfitzgerald\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:169:10)
at Gulp.<anonymous> (C:\Users\bfitzgerald\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:195:15)
at Gulp.emit (events.js:107:17)
at Gulp.Orchestrator._emitTaskDone (C:\users\bfitzgerald\desktop\gulp-test\node_modules\gulp\node_modules\orchestrator\index.js:264:8)
at C:\users\bfitzgerald\desktop\gulp-test\node_modules\gulp\node_modules\orchestrator\index.js:275:23
at finish (C:\users\bfitzgerald\desktop\gulp-test\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:21:8)
at cb (C:\users\bfitzgerald\desktop\gulp-test\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:29:3)
at Gulp.<anonymous> (C:\users\bfitzgerald\desktop\gulp-test\gulpfile.js:9:2)
at module.exports (C:\users\bfitzgerald\desktop\gulp-test\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:34:7)
at Gulp.Orchestrator._runTask (C:\users\bfitzgerald\desktop\gulp-test\node_modules\gulp\node_modules\orchestrator\index.js:273:3)
Run Code Online (Sandbox Code Playgroud)
这是promises选项的输出:
$ gulp option-2
[10:46:50] Using gulpfile C:\users\bfitzgerald\desktop\gulp-test\gulpfile.js
[10:46:50] Starting 'task-1-option-2'...
[10:46:50] task 1 running
[10:46:52] 'task-1-option-2' errored after 2.08 s
[10:46:52] Error: unit test failed, stop build
at formatError (C:\Users\bfitzgerald\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:169:10)
at Gulp.<anonymous> (C:\Users\bfitzgerald\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:195:15)
at Gulp.emit (events.js:107:17)
at Gulp.Orchestrator._emitTaskDone (C:\users\bfitzgerald\desktop\gulp-test\node_modules\gulp\node_modules\orchestrator\index.js:264:8)
at C:\users\bfitzgerald\desktop\gulp-test\node_modules\gulp\node_modules\orchestrator\index.js:275:23
at finish (C:\users\bfitzgerald\desktop\gulp-test\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:21:8)
at C:\users\bfitzgerald\desktop\gulp-test\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:45:4
at _rejected (C:\users\bfitzgerald\desktop\gulp-test\node_modules\q\q.js:804:24)
at C:\users\bfitzgerald\desktop\gulp-test\node_modules\q\q.js:830:30
at Promise.when (C:\users\bfitzgerald\desktop\gulp-test\node_modules\q\q.js:1064:31)
Run Code Online (Sandbox Code Playgroud)
所以这些建议似乎是正确的,因为它们阻止了第二个任务的运行,但是因为gulp正在掀起某种硬错误,所以仍然有些错误.任何人都可以为我阐明这一点吗?
我不太确定我理解你试图用你的测试 url 完成什么,但是你可以调用传递给你的任务的回调函数,并使用非空值让它中止任务并发出通知:
gulp.task("run-server-tests", function(callback) {
var serverTestUrl = "http://myurl";
request(serverTestUrl, function (error, response, body) {
var responseData = JSON.parse(body);
if (responseData.isSuccess) {
// snip...
callback();
} else {
open(serverTestUrl + "&render"); // show unit test failures
callback('Unit test error');
}
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4840 次 |
| 最近记录: |