Невозможно отправить аутентифицированный запрос в тестах, используя Jest, Supertest, Passport, Koa2 снова - PullRequest
4 голосов
/ 20 июня 2019

Я пытался использовать мартовский ответ 2018 года безрезультатно.Я тоже использую Jest, Supertest, а в моем случае Koa и Passport.

Использование клиента REST в Visual Studio, нет проблем.Сессия проходит, Passport аутентифицируется, и я получаю данные.Но в шутку не ходи.Я могу войти в систему нормально, я получаю Koa: sess в порядке, но я не могу сделать запрос с проверкой подлинности.

Кто-нибудь видит что-нибудь с нижеуказанным?

const supertest = require('supertest')
const app = require('../app.js')
const http = require('http')

const agent = supertest.agent((http.createServer(app.callback())))

let session = null

beforeAll(async () => {
  const response = await agent
  .post('/v1/users/login')
  .set({'content-Type': 'application/json'})
  .send({ username: 'username', password: 'password' })

  session = response.headers['set-cookie'][0]
               .split(',')
               .map(item => item.split(';')[0])
               .join('; ')

  console.log(stringify(session))

  expect(response.status).toEqual(200)
})

describe('user tests', () => {
  test('data', async () => {
    const response = await agent.get('/v1/users/data?dataIdId=140934')
    .set('Cookie', session)

    expect(response.status).toEqual(200)
  })
})

Конечно, другой вопрос, почемуэто даже необходимо, если вы используете агент.Но и в этом я не прогрессировал.

Заранее спасибо.

1 Ответ

1 голос
/ 22 июля 2019

После долгих споров я наконец нашла ответ.Предоставлено https://github.com/facebook/jest/issues/3547#issuecomment-397183207.

Мне пришлось заменить

session = response.headers['set-cookie'][0]
               .split(',')
               .map(item => item.split(';')[0])
               .join('; ')

на

  response.headers['set-cookie'][0]
    .split(',')
    .map(item => item.split(';')[0])
    .forEach(c => agent.jar.setCookie(c));

Большой вздох.

...