【发布时间】:2021-03-07 03:39:27
【问题描述】:
我希望使用 supertest 来测试 API 请求和响应。以下是我迄今为止尝试过的。
route.test.js
const testUtils = require('./setupTestUtils');
let authenticateUser = request.agent(app);
before(function(done){
testUtils.login(authenticateUser, userCredentials).then((res) => {
expect(res.statusCode).to.equal(200);
done();
}, (err) => {
console.log(err);
done(err);
});
});
setupTestUtils.js
function login (rest, testUserLogin) {
let defer = Q.defer();
rest.post('/login')
.send(testUserLogin)
.expect(200)
.end(function () {
rest.get('/loggedin')
.expect((res) => {
if (err) {
console.log('ERROR: ' + JSON.stringify(err));
defer.reject(err);
} else {
defer.resolve(res);
}
})
.end();
});
return defer.promise;
}
在我的 app.js 中,我使用护照进行身份验证。身份验证后,我使用 session.regenerate 函数重新生成会话 ID 以避免会话固定。
登录的初始发布请求通过,没有任何失败。但是,随后的 GET 请求“loggedIn”失败。此函数在内部使用来自护照的 req.isAuthenticated() 函数。这总是返回 false。
经过调查,我发现重新生成的会话和请求对象(对于 req.isAuthenticated())之间的会话 ID 不同。
根据我的搜索,我了解到应该使用 supertest 的“代理”自动维护 cookie。然而,这对我来说似乎并非如此。我还尝试从初始响应中维护 cookie。这似乎对我也不起作用。 “ res.headers['set-cookie'] ” 以未定义的形式出现(也不知道为什么会这样)。
有人可以帮我理解我在这里缺少什么吗?
我正在使用版本 - Supertest @v6.0.1 和护照 @v0.4.1
【问题讨论】:
标签: node.js mocha.js passport.js supertest