1
我嘗試使用supertest和nock在我的Express應用程序中測試中間件功能,但遇到問題,我設置的路由已由較早的中間件檢查以確保會話屬性存在對傳入的req
對象。在Express中測試中間件時提供會話
我需要以某種方式模擬運行測試之前的會話對象,但我不確定如何處理這個問題。首先讓我分享一些代碼:
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我使用快遞會話,但我想,如果我的測試失敗有我可以通過某種方式獲取測試套件中的req.session
對象,並在運行任何測試之前設置accessToken屬性的值。
任何人都可以提供任何建議\想法嗎?
感謝