【发布时间】:2017-03-30 19:45:17
【问题描述】:
我正在尝试使用 supertest 和 nock 在我的 Express 应用程序中测试中间件功能,但我遇到的问题是,我设置的路由由早期的中间件检查,以确保传入的 req 对象上存在会话属性.
我需要在运行测试之前以某种方式模拟会话对象,但不确定如何处理。首先让我分享一些代码:
router.js
app.use('/api', helpers.hasAccessToken, require('./routes.js'));
routes.js
router.route('/*')
.get(routesController.fetch)
helpers.js
module.exports.hasAccessToken = function(req, res, next) {
if(req.session.accessToken){
next();
} else {
res.status(401).send('LOGIN_SESSION_ENDED');
}
};
routesController.js
module.exports.fetch = function(req, res) {
var options = helpers.buildAPIRequestOptions(req);
request(options, function(err, response, body){
res.status(response.statusCode).send(body);
});
};
routesController.spec.js
var app = require('./index.js'),
request = require('supertest')(app),
expect = require('chai').expect,
nock = require('nock');
describe('GET requests', function(){
beforeEach(function(){
nock('https://10.105.195.12:8243')
.get('/v1/schemes')
.reply(200, {foo:'bar'});
});
it('should return a 200 HTTP status code', function(done){
request
.get('/api/schemes')
.end(function(err, res){
expect(res.status).to.equal(200);
done();
});
});
});
我的测试失败,因为res.status 的值为 401。我正在使用 express-session,但我想知道是否有某种方法可以在我的测试套件中获取 req.session 对象并设置运行任何测试之前的 accessToken 属性。
有人可以提供任何建议\想法吗?
谢谢
【问题讨论】:
标签: node.js express supertest express-session nock