Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 量角器投掷';TypeError:无法读取属性';状态代码';未定义的';请求回调_Node.js_Selenium Webdriver_Request_Protractor_Automated Tests - Fatal编程技术网

Node.js 量角器投掷';TypeError:无法读取属性';状态代码';未定义的';请求回调

Node.js 量角器投掷';TypeError:无法读取属性';状态代码';未定义的';请求回调,node.js,selenium-webdriver,request,protractor,automated-tests,Node.js,Selenium Webdriver,Request,Protractor,Automated Tests,我正在用量角器编写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.f

我正在用量角器编写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

我不确定这是否与某种配置有关,或者可能是这种情况造成的,但我确实需要指导。

您永远不会同时收到错误和响应,因此:

    defer.reject({
        error: error,
        message: response.statusCode
    });
当错误为真时,将尝试检查未定义的响应状态代码。也许可以试试这个:

    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
    });
}
或者类似的东西

然后您将知道您的错误是什么,因为当前它不会在响应中返回错误,因为它在有机会返回之前崩溃了


现在,错误很可能是因为没有连接到主机或类似的东西。

谢谢您的提示。应用更改后,我可以看到我的端点主机不完全正确,域丢失。标记为有效答案的。