Как я могу очистить куки между каждым тестом, используя Jest и Supertest? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть набор тестов, которые все проходят, если они выполняются индивидуально. Однако тесты не пройдены из-за проверки значения файла cookie, если они выполняются параллельно.

Проблема в том, что файлы cookie супертеста не очищаются между каждым тестом.

Есть ли способ очистить куки между каждым тестом, используя супер-тест? Это связано с этой открытой проблемой , которая не предлагает решения.

Я пробовал оба:

afterEach(() => {
  request(app)
    .set('Cookie', [])
})

и

afterEach(() => {
  request(app)
    .set('Cookie', '')
})

... безрезультатно.

Вот два теста, которые работают по отдельности, но не работают, если они выполняются параллельно:

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()
    })
})

и

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()
    })
})

1 Ответ

0 голосов
/ 06 сентября 2018

Вы можете попытаться явно очистить куки, которые вы установили в своих тестах. Это можно сделать с помощью модуля NPM 'js-cookies' или с помощью простой вспомогательной функции:

function removeCookie(name) {
  document.cookie = `${name}=1; expires=1 Jan 1970 00:00:00 GMT;`
}

Если вы хотите очистить все куки одновременно, вы можете использовать это решение.

...