0

私は分度器でUIテストを作成していますが、UIを使用する代わりにRESTfulサービスを通じてファイルを直接アップロードしています。次のメソッドがあります。分裂器の投げ 'TypeError:要求のコールバックで' statusCode 'of undefined'を読み取ることができません

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の場合)正常に動作しますが、私は(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 

私は」これが何らかの設定に関係しているのか、それともSOがこの問題を引き起こしているのかどうかはわかりませんが、確かにガイダンスが必要です。

答えて

0

あなたがエラーと応答ので、この両方を取得することはありません:

defer.reject({ 
     error: error, 
     message: response.statusCode 
    }); 

エラーが真である時はいつでも未定義である応答のから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 
    }); 
} 

か何か。

次に、エラーが発生する前にクラッシュするため、エラーが返されないため、エラーとは何かを知ることができます。

エラーは、ホストなどに接続されていない可能性が高いためです。

+0

チップをありがとうございます。変更を適用すると、エンドポイントホストが完全に正しくないことがわかりましたが、ドメインが見つかりませんでした。有効な回答としてマークされています。 – mleitao

関連する問題