我用嘲笑passport.initialize,测试助手,并在化合物配置事件的监听器的组合。
这提供了两件事情:
- DRY - 跨控制器测试
beforeEach
代码重用。
- 不显眼的测试 - 模拟passport.initialize,所以我没有必要修改基于测试的配置。
在测试/ init.js我添加的方法,以模拟passport.initialize **:
http://hackerpreneurialism.com/post/48344246498/node-js-testing-mocking-authenticated-passport-js
// Fake user login with passport.
app.mockPassportInitialize = function() {
var passport = require('passport');
passport.initialize = function() {
return function (req, res, next) {
passport = this;
passport._key = 'passport';
passport._userProperty = 'user';
passport.serializeUser = function(user, done) {
return done(null, user.id);
};
passport.deserializeUser = function(user, done) {
return done(null, user);
};
req._passport = {
instance: passport
};
req._passport.session = {
user: new app.models.User({ id: 1, name: 'Joe Rogan' })
};
return next();
};
};
};
然后,我添加一个:
**在发现它helpers.js文件在每个控制器中调用:
module.exports = {
prepApp: function (done) {
var app = getApp();
compound = app.compound;
compound.on('configure', function() { app.mockPassportInitialize(); });
compound.on('ready', function() { done(); });
return app;
}
};
这将在每个控制器的beforeEach
中调用:
describe('UserController', function() {
beforeEach(function (done) {
app = require('../helpers.js').prepApp(done);
});
[...]
});
我有类似的问题。请参阅我的回答http://stackoverflow.com/a/17732950/448876 – absynce 2013-08-06 22:26:35