Ich habe eine Authentifizierung Middleware Ich möchte testen, die Middleware macht einen externen Anruf zu einem Authentifizierungsdienst und auf der Grundlage der zurückgegebenen statusCode ruft entweder die nächste Middleware/Controller oder es gibt eine zurück 401
Status. So etwas wie das, was ich unten habe.NodeJS: So testen Middleware externen Aufruf
var auth = function (req, res, next) {
needle.get('http://route-auth-service.com', options, function (err, reply) {
if (reply.statusCode === 200) {
next();
} else {
res.statusCode(401)
}
})
}
Ich benutze SinonJS
, nock
und node-mocks-http
zum Testen und mein einfacher Test ist als unten.
// require all the packages and auth middleware
it('should login user, function (done) {
res = httpMocks.createResponse();
req = httpMocks.createRequest({
url: '/api',
cookies: {
'session': true
}
});
nock('http://route-auth-service.com')
.get('/')
.reply(200);
var next = sinon.spy()
auth(res, req, next);
next.called.should.equal(true); // Fails returns false instead
done();
});
Der Test schlägt immer fehl und gibt false zurück, ich glaube, dass der Grund ist, weil die Nadel Aufruf asynchron ist, und vor dem Aufruf liefert die Behauptung Teil erreicht ist. Ich habe den ganzen Tag daran gearbeitet, ich brauche bitte Hilfe.
Dank @Derick Bailey, ich schätze, ich finde, dass ich mehr gelernt Frage auf SO zu fragen, als ich die meisten Bücher zu lesen, es funktioniert so wie ich es will. –
Ich habe Probleme beim Testen der für, wenn zurückgegeben Statuscode nicht 200 ist, wie gehe ich darüber? –