Expressには次のものがあります
//index.js
var service = require('./subscription.service');
var auth = require('../auth/auth.service');
var router = express.Router();
router.post('/sync', auth.isAuthenticated, service.synchronise);
module.exports = router;
IsAuthenticatedをオーバーライドまたはモックしてこれを返す
auth.isAuthenticated = function(req, res, next) {
return next();
}
ここに私のユニットテストがあります:
it('it should return a 200 response', function(done) {
//proxyquire here?
request(app).post('/subscriptions/sync')
.set('Authorization','Bearer '+ authToken)
.send({receipt: newSubscriptionReceipt })
.expect(200,done);
});
Proxyquireを使用してindex.jsをモックしようとしました-ルーターをスタブする必要があると思いますか?私もテストでオーバーライドしようとしました
app.use('/subscriptions', require('./api/subscription'));
これをモックする簡単な方法がなければならないので、リクエストを認証する必要はありません。何か案は?
sinon
を使用してisAuthenticated
メソッドをスタブ化できますが、auth.isAuthenticated
への参照をミドルウェアとして設定する前に行う必要があるため、index.js
およびapp
が作成されます。ほとんどの場合、これはbeforeEach
フックで必要になります。
var app;
var auth;
beforeEach(function() {
auth = require('../wherever/auth/auth.service');
sinon.stub(auth, 'isAuthenticated')
.callsFake(function(req, res, next) {
return next();
});
// after you can create app:
app = require('../../wherever/index');
});
afterEach(function() {
// restore original method
auth.isAuthenticated.restore();
});
it('it should return a 200 response', function(done) {
request(app).post('/subscriptions/sync')
.set('Authorization','Bearer '+ authToken)
.send({receipt: newSubscriptionReceipt })
.expect(200,done);
});
auth.isAuthenticated
が復元された後でも、既存のapp
インスタンスはミドルウェアとしてスタブを持つため、元の動作を取得する必要がある場合は別のapp
インスタンスを作成する必要があります。何らかの理由。