2016-06-30 9 views
3

私はテストしたい認証ミドルウェアを持っています。ミドルウェアは認証サービスへの外部呼び出しを行い、返されたstatusCodeに基づいて次のミドルウェア/コントローラを呼び出します。 401ステータス。私が下にあるもののようなもの。NodeJS:外部呼び出しを行うミドルウェアをテストする方法

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

は、私はテストのためSinonJSnock、および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を返し、私は針の呼び出しは非同期であり、そして呼び出しが戻る前に、アサーションの部分に到達するための理由があると感じています。私は一日中これに取り組んできました。私は助けてください。

答えて

2

はあなたが主張

// this may be "beforeEach" 
// depends on what testing framework you're using 
before(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, function() { 
    next(); 
    done(); 
    }); 
}); 

it('should login user', function() { 
    next.called.should.equal(true); // Fails returns false instead 
}); 
+1

おかげ@Derickベイリーから離れたテスト・セットアップを分割する必要がある、私は本当に感謝し、私はより多くの私はほとんど本を読んでいるよりも、SO、それが動作する上で質問を学んできたことがわかりちょうど私がそれを望むように。 –

+0

返されたステータスコードが200ではない場合に問題をテストしていますが、どうすればよいですか? –

関連する問題