【发布时间】:2019-06-20 11:44:48
【问题描述】:
我一直在尝试使用 internetross 的 March 2018 answer 无济于事。我也在使用 Jest、Supertest,在我的例子中是 Koa 和 Passport。
在 Visual Studio 中使用 REST 客户端,没问题。会话通过,Passport 进行身份验证,然后我获取数据。但在 Jest 中,不行。我可以正常登录,我得到 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)
})
})
当然,另一个问题是如果您使用代理,为什么这甚至是必要的。但我在这方面也没有任何进展。
提前致谢。
【问题讨论】:
-
智能单引号是故意的吗?也许您应该将它们编辑为单引号,以免分散读者的注意力。例如:
‘supertest’应该是'supertest'和所有其他匹配项。 -
不。我的 B 产品在粘贴之前在 Mac 上的熊掌记中编写文本。我会修复它们。
-
如何处理中间件中的会话?它是存储在本地还是内存中? Supertest 可能会在通过测试后在后台重新启动应用程序实例,因此如果您将会话保留在内存中,您将丢失它。
-
这是一个调查的好主意。明天我会更深入地研究它。我正在使用本地护照。这是设置它的非常简单的代码:
passport.use( new LocalStrategy(options, (username, password, done) => { User.findOne({ username: username }) .then(user => { if (!user) return done(null, false) if (password === user.password) { return done(null, user) } else { return done(null, false) } }) .catch(err => { return done(err) }) }) )
标签: node.js jestjs supertest koa2