テストしたい認証ミドルウェアがあり、ミドルウェアは認証サービスへの外部呼び出しを行い、返された statusCode に基づいて、次のミドルウェア/コントローラーを呼び出すか、401
ステータスを返します。私が以下に持っているようなもの。
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)
}
})
}
SinonJS
テストには、、、nock
およびを使用node-mocks-http
します。簡単なテストは以下のとおりです。
// 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();
});
テストは必ず失敗して false を返しますが、その理由は針の呼び出しが非同期で、呼び出しが返される前にアサーション部分に到達しているためだと感じています。私は一日中これに取り組んでいます。助けが必要です。