3

テストしたい認証ミドルウェアがあり、ミドルウェアは認証サービスへの外部呼び出しを行い、返された 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 を返しますが、その理由は針の呼び出しが非同期で、呼び出しが返される前にアサーション部分に到達しているためだと感じています。私は一日中これに取り組んでいます。助けが必要です。

4

1 に答える 1