J'ai ce qui suit dans 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;
Je veux remplacer ou se moquer de l'authentification pour retourner ce
auth.isAuthenticated = function(req, res, next) {
return next();
}
Voici mon test unitaire:
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);
});
J'ai essayé de se moquer de index.js en utilisant proxyquire - Je pense que je dois bloquer le routeur? J'ai aussi essayé de passer outre au test
app.use('/subscriptions', require('./api/subscription'));
Il doit y avoir un moyen simple de se moquer de cela, donc je n'ai pas besoin d'authentifier la demande. Des idées?
Vous pouvez utiliser sinon
pour remplacer la méthode isAuthenticated
, mais vous devez le faire avant une référence à auth.isAuthenticated
est défini comme middleware, donc avant d'avoir besoin du index.js
et app
est créé. Vous souhaiterez probablement cela dans un crochet 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);
});
Veuillez noter que même après auth.isAuthenticated
est restauré, l'instance existante de app
aura un stub comme middleware, vous devez donc créer une autre instance de app
si vous avez besoin d'obtenir un comportement original pour une raison quelconque.