无法再次使用Jest,Supertest,Passport和Koa2发送经过身份验证的请求

时间:2019-06-20 11:44:48

标签: node.js jestjs supertest koa2

我一直在尝试使用internetross的March 2018 answer无济于事。我也使用Jest,Supertest,在我的例子中是Koa和Passport。

在Visual Studio中使用REST客户端,没问题。会话通过,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 个答案:

答案 0 :(得分:0)

经过大量研究,我终于找到了答案。由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));

长叹。