0

Ich schreibe UI-Tests mit Winkelmesser und ich lade Dateien direkt über einen RESTful-Service statt UI. Ich habe die folgende MethodeWinkelmesser werfen 'TypeError: Kann Eigenschaft' statusCode 'von' undefined 'auf Anfrage nicht lesen callback

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; 

Hinweis: API gibt 201 zurück, wenn erfolgreich hochgeladen.

funktioniert gut, wenn ich den Code durch meine IDE (in Windows) laufen, aber ich möchte die Tests durch Jenkins (über Ubuntu) und in diesem Fall, dass ich den Fehler laufen:

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 

I‘ Ich bin mir nicht sicher, ob dies mit irgendeiner Art von Konfiguration zu tun hat oder ob SO dies verursachen könnte, aber ich brauche natürlich Anleitung.

Antwort

0

Sie sollten nie beide Fehler und Antwort erhalten, so folgt aus:

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

wird versuchen, die status der Antwort zu überprüfen, die nicht definiert ist, wenn Fehler wahr ist. Vielleicht versuchen Sie dies:

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

oder so ähnlich.

Aber es kann besser sein, separat zu behandeln 3 Fällen wie folgt aus:

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 
    }); 
} 

oder vielleicht:

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 
    }); 
} 

oder etwas ähnliches.

Dann wissen Sie, was ist Ihr Fehler, weil es derzeit nicht den Fehler in der Antwort zurückgibt, weil es abstürzt, bevor es eine Chance hat, dies zu tun.

Jetzt wird der Fehler wahrscheinlich wegen keine Verbindung mit dem Host oder so etwas sein.

+0

Vielen Dank für den Tipp. Nach dem Anwenden der Änderungen konnte ich sehen, dass mein Endpunkt-Host nicht ganz richtig war, Domain fehlte. Als gültige Antwort gekennzeichnet. – mleitao

Verwandte Themen