YPC*_*ble 4 superagent supertest reactjs jestjs
我有一套测试,如果单独运行,它们都会通过。但是,如果并行运行,测试会由于检查 cookie 的值而失败。
问题是 supertest 的 cookie 在每次测试之间都不会被清除。
有没有办法使用 supertest 在每次测试之间清除 cookie?这与这个未提供解决方案的未解决问题有关。
我都尝试过:
afterEach(() => {
request(app)
.set('Cookie', [])
})
Run Code Online (Sandbox Code Playgroud)
和:
afterEach(() => {
request(app)
.set('Cookie', '')
})
Run Code Online (Sandbox Code Playgroud)
...没有用。
以下是单独运行良好但并行运行时失败的两个测试:
test('It should respond 302 to the wrong url', (done) => {
const accessiblePages = {get_member_accessible_pages: []}
nock('http://localhost:8000')
.log(console.log)
.get('/auth/me/')
.reply(200, accessiblePages)
// Must use j: to work with cookie parser
const cookie = 'userInfo=j:' + encodeURIComponent(
JSON.stringify(accessiblePages))
request(app)
.get('/first-url')
.set('Cookie', cookie)
.expect(302)
.expect('Location', '/new-url')
.then((response) => {
expect(response.statusCode).toBe(302)
done()
})
})
Run Code Online (Sandbox Code Playgroud)
和
test('It should set an updated cookie for the logged in user', (done) => {
const accessiblePages = {get_member_accessible_pages: [123, 456]}
nock('http://localhost:8000')
.log(console.log)
.get('/auth/me/')
.reply(200, accessiblePages)
// Must use j: to work with cookie parser
const userInfoCookie = 'userInfo=j:' + encodeURIComponent(
JSON.stringify(accessiblePages))
const accessTokenCookie = 'accessToken=accessToken'
const requestCookie = [userInfoCookie, accessTokenCookie].join(';')
const responseCookieValue = accessiblePages
request(app)
.get('/first-url')
.set('Cookie', requestCookie)
.expect(200)
.then((response) => {
expect(response.statusCode).toBe(200)
const cookies = setCookie.parse(response)
expect(cookieParser.JSONCookie(cookies[0].value))
.toEqual(responseCookieValue) // FAILS HERE - shows accessiblePages variable from the previous test.
done()
})
})
Run Code Online (Sandbox Code Playgroud)
您可以尝试显式清除您在测试中设置的 cookie。它可以通过 NPM 模块“js-cookies”或通过简单的辅助函数来完成:
function removeCookie(name) {
document.cookie = `${name}=1; expires=1 Jan 1970 00:00:00 GMT;`
}
Run Code Online (Sandbox Code Playgroud)
如果您想一次清除所有cookie,您可以使用此解决方案。
| 归档时间: |
|
| 查看次数: |
8465 次 |
| 最近记录: |