我正在通过NestJS API中的仅HTTP cookie传递身份验证令牌。
同样,当为我的Auth端点编写一些E2E测试时,我遇到了cookie不在我期望的位置的问题。
以下是我的简化测试代码:
describe('auth/logout', () => {
it('should log out a user', async (done) => {
// ... code to create user account
const loginResponse: Response = await request(app.getHttpServer())
.post('/auth/login')
.send({ username: newUser.email, password });
// get cookie manually from response.headers['set-cookie']
const cookie = getCookieFromHeaders(loginResponse);
// Log out the new user
const logoutResponse: Response = await request(app.getHttpServer())
.get('/auth/logout')
.set('Cookie', [cookie]);
});
});
在我的JWT策略中,我正在使用自定义cookie解析器。我遇到的问题是request.cookies
到达解析器时始终为undefined
。但是,该cookie将出现在request.headers
中。
我正在阅读这篇中型文章https://medium.com/@juha.a.hytonen/testing-authenticated-requests-with-supertest-325ccf47c2bb中的手动cookie示例,并且在请求对象上似乎没有任何其他方法可以设置cookie。
如果我测试Postman的相同功能,一切都会按预期工作。我在做什么错?
根据您关注的文章,代码位于https://medium.com/@juha.a.hytonen/testing-authenticated-requests-with-supertest-325ccf47c2bb:1)在.set('cookie', cookie)
中使用小写形式的“ cookie”值,在您的代码中使用Pascal大小写==> 您是否尝试过在代码中使用小写形式?2)分配给'cookie'标头的cookie值不是数组,而在您的代码中分配的是数组==> 您是否尝试过使用非数组值?
因此,您可以尝试使用以下代码:
describe('auth/logout', () => {
it('should log out a user', async (done) => {
// ... code to create user account
const loginResponse: Response = await request(app.getHttpServer())
.post('/auth/login')
.send({ username: newUser.email, password });
// get cookie manually from response.headers['set-cookie']
const cookie = getCookieFromHeaders(loginResponse);
// Log out the new user
const logoutResponse: Response = await request(app.getHttpServer())
.get('/auth/logout')
.set('cookie', cookie) // <== here goes the diff
.expect(200, done);
});
});
让我们知道是否有帮助:)