gpt4 book ai didi

javascript - 如何将express-session req.session.user附加到chai-http请求?

转载 作者:行者123 更新时间:2023-11-28 05:35:55 24 4
gpt4 key购买 nike

我的 API 使用 express-session 并根据 req.session.user 对象的存在对任何请求进行身份验证,如下所示:

app.use(function(req, res, next) {
if (req.session.user) {
console.log('Authenticated request\n');
next();
} else {
console.log('Request not authenticated, request rejected\n');
res.status(403).json({'message': 'Request rejected'});;
}
});

我正在使用 chai-http 为我的 API 编写测试,如下所示:

describe('test', function(){
it('/test', function(done){
chai.request(server)
.get('/test')
.end(function(err, res){
res.body.should.be.a('object');
});
});
});

问题
我希望请求能够通过上面的身份验证。如何将 .session.user 对象添加到我的 chai-http 请求中?我应该使用 supertest 来代替吗?

最佳答案

您是否使用护照进行身份验证,如果是,请参阅下文。如果不是:请查看 Passport-stub 的实现,看看它如何劫持中间件来伪造用户:

https://github.com/gtramontina/passport-stub/blob/master/src/passport-stub.coffee

使用此技术,您可以将中间件插入应用程序以伪造用户

如果您使用护照:

如何使用护照 stub

我查看了 https://github.com/gtramontina/passport-stub

这是我对 protected /users 路由的测试:

//During the test the env variable is set to test
process.env.NODE_ENV = 'test';

var chai = require('chai');
var chaiHttp = require('chai-http');
var expect = chai.expect

var passportStub = require('passport-stub');

var User = require.main.require('models/User');

// https://gist.github.com/branneman/8048520#7-the-wrapper
var app = require.main.require('app');



chai.use(chaiHttp);

passportStub.install(app);


describe('Users Controller', (done) => {

var user, nock, github, mockToken, githubHost;


beforeEach((done) => { //Before each test we reset the database
User.query().del().then(() => {
var params = {name: 'bonzo', authtype: 'github', authid: '12345678'}
// Create a user so the db isn't empty
// May help us uncover odd bugs
new User(params).save()
.then((bonzo) => {
user = bonzo;
done();
})
})
});

describe('index', () => {
describe('without user', () => {
it('it should redirect to github.com home page', (done) => {
chai.request(app)
.get('/users')
.redirects(0)
.end((err, res) => {
expect(res.headers['location']).to.match(/^\//);
done();
});
});
});

describe('with user', () => {
it('it should display users list', (done) => {

passportStub.login({
get: function(){ return 'bonzo'; }
});

chai.request(app)
.get('/users')
.redirects(0)
.end((err, res) => {
expect(res.text).to.match(/bonzo/);
done();
});
});
});
});
});

关于javascript - 如何将express-session req.session.user附加到chai-http请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39357062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com