我正在使用量角器编写UI测试,我直接通过RESTful服务而不是使用UI上传文件。我有以下方法
var defer = protractor.promise.defer();
request(options, function (error, response, body) {
if (!error && response.statusCode == 201) {
var info = JSON.parse(body);
defer.fulfill(info);
} else {
defer.reject({
error: error,
message: response.statusCode
});
}
});
return defer.promise;
注意:如果成功上传,API将返回201.
通过我的IDE(在Windows中)运行代码时工作正常,但我想通过Jenkins(通过Ubuntu)运行测试,在这种情况下我收到错误:
E/launcher - TypeError: Cannot read property 'statusCode' of undefined
at Request._callback (file.js:144:34)
at self.callback (/workspace/node_modules/request/request.js:186:22)
at emitOne (events.js:101:20)
at Request.emit (events.js:188:7)
at Request.onRequestError (/workspace/node_modules/request/request.js:845:8)
at emitOne (events.js:96:13)
at ClientRequest.emit (events.js:188:7)
at Socket.socketErrorListener (_http_client.js:310:9)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
E/launcher - Process exited with error code 199
我不确定这是否与某种配置有关,或者是否可能导致此问题,但我确实需要指导。
答案 0 :(得分:0)
你永远不应该同时得到错误和回应,所以:
defer.reject({
error: error,
message: response.statusCode
});
将尝试检查响应的statusCode,当error为true时,该响应是未定义的。也许试试这个:
defer.reject({
error: error,
message: response ? response.statusCode : null
});
或类似的东西。
但最好分别处理3个案例:
if (error) {
defer.reject({
error: error
});
} else if (response.statusCode === 201) {
var info = JSON.parse(body);
defer.fulfill(info);
} else {
defer.reject({
message: response.statusCode
});
}
或者也许:
if (error) {
defer.reject({
error: error
});
} else if (response.statusCode === 201) {
var info = JSON.parse(body);
defer.fulfill(info);
} else {
defer.reject({
error: 'Bad status code: ' + response.statusCode
});
}
或类似的东西。
然后你会知道你的错误是什么,因为它目前没有在响应中返回错误,因为它在有机会之前崩溃了。
现在,错误很可能是因为没有连接到主机或类似的东西。