Ich schreibe Komponententests für eine einfache NodeJS-Anwendung und aus irgendeinem Grund kann ich Antwortkörper nicht abrufen. Es erhält den richtigen Antwortcode (entweder 200 für erfolgreiche Anfragen oder 422 für ungültige Anfragen), aber der Körper scheint leer zu sein. Auch, wenn ich genau die gleiche Anfrage mit httpie mache es funktioniert wie Charme. Die Protokollierung zeigt auch, dass der Controller wie erwartet funktioniert.Node-Fetch empfängt leeren Körper
Alle Ideen oder Vorschläge sind willkommen.
Hier ist der Controller Teil:
function register (req, res) {
return _findUser({email: req.body.email})
.then(user => {
if (user) {
console.log('EMAIL TAKEN');
return Promise.reject({message: 'This email is already taken'});
}
let params = _filterParams(req.body);
if (_isRegistrationValid(params)) {
console.log('REGISTRATION VALID');
return params;
} else {
console.log('PARAMS INVALID');
return Promise.reject({message: 'Params invalid'});
}
})
.then(_createUser)
.then(_generateToken)
.then(token => {
console.log('SENDING TOKEN');
console.log(token);
res.send({token: token});
})
.catch(error => {
console.log('CATCH ERROR');
res.status(422).send(error);
});
}
Hier ist der Teststrecke:
it ('Returns token when data is valid', done => {
fetch(`http://localhost:${testPort}/api/register`, {
headers: {'Content-Type': 'application/json'},
method: 'POST',
body: JSON.stringify({email: '[email protected]', password: 'password', confirmPassword: 'password'})
})
.then(response => {
assert(response.ok); // this part works ok
expect(response.body.token).to.exist; // this part fails
done();
})
.catch(done);
});
Hier ist die httpie Ausgabe:
kpr$ http post localhost:4000/api/register email="[email protected]" password="password" confirmPassword="password"
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 941
Content-Type: application/json; charset=utf-8
Date: Sat, 08 Oct 2016 11:39:30 GMT
ETag: W/"3ad-uBdW+HLbY7L2gb65Y+zptQ"
X-Powered-By: Express
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9_long_token_string_2M"
}
Hier ist der Testausgang:
REGISTRATION VALID
_createUser
(node:70495) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html
_generateToken
SENDING TOKEN
eyJhbGciOiJIU_long_token_string_lmYA
0 passing (160ms)
2 pending
1 failing
1) Authorization Registration Returns token when data is valid:
AssertionError: expected undefined to exist
at fetch.then.response (test/auth-controller-spec.js:57:41)
at process._tickCallback (internal/process/next_tick.js:103:7)
Druck aus Antwort Körper von innen fetch() zeigt einige große Objekt:
PassThrough {
_readableState:
ReadableState {etc...}
}
Können Sie 'response.json()' anstelle von 'response.ok' versuchen? –
response.json() gibt _Promise {} _ –
Konstantin
zurück Ok, ich denke, das ist was ich brauchte: _response.json(). Dann() _ gibt zurück, was ich brauchte. Vielen Dank, David! – Konstantin