I have the following in 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;
I want to override or mock isAuthenticated to return this
auth.isAuthenticated = function(req, res, next) {
return next();
}
Here is my unit test:
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);
});
I have tried mocking index.js using proxyquire - I think I need to stub the router? I have also tried to override in the test
app.use('/subscriptions', require('./api/subscription'));
There must be a simple way to mock this out so I don't need to authenticate the request. Any ideas?
You can use sinon
to stub isAuthenticated
method, but you should do that before a reference to auth.isAuthenticated
is set as a middleware, so before you require the index.js
and app
is created. Most likely you would want this in a beforeEach
hook:
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);
});
Please note that even after auth.isAuthenticated
is restored, existing app
instance will have stub as a middleware, so you need to create another app
instance if you need to get an original behavior by some reason.
Update: there is a way to alter middleware's behavior without recreating the server each time as explained in another SO answer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With