让 async/await 与 superagent 一起工作
Getting async/await to work with superagent
我在这里的语法中遗漏了一些东西但不确定是什么:
我正在尝试打开它。但是我得到 expected undefined to equal 'pXVCJ9.eyJpYXQ'
Test.js
describe('User API', () => {
let email, password, requestBody
beforeEach(() => {
email = 'someperson@gmail.com'
password = 'password'
requestBody = {
session: '05833a20-4035',
token: 'pXVCJ9.eyJpYXQ' }
nock('https://someurl/')
.get('users/sessions')
.reply(200, requestBody)
})
it('returns user session for login', async () => {
const data = await UserApi.login(email, password)
expect(data.token).to.equal(requestBody.token)
expect(data.session).to.equal(requestBody.session)
})
})
UserApi.js
import request from 'superagent'
export const endpoint = 'https://someurl/'
const login = (email, password) => async () => {
try {
return await request
.get(`${endpoint}/users/sessions`)
.send({ email: email, password: password })
.set('Accept', 'application/json')
} catch (err) {
//todo: implement this
}
}
export default { login }
有几个问题:
const login = (email, password) => async () => { ... }
这使得 login
函数成为 return 异步函数。它本身应该是一个异步函数,所以这个:
const login = async (email, password) => { ... }
接下来,在您的 nock
设置中,您没有在路径前加上 /
,因此 nock
将无法匹配请求。轻松修复:
nock('https://someurl')
.get('/users/sessions')
.reply(...);
最后,superagent
将 return 响应数据作为 response.body
或者,在您的情况下,data.body
。所以断言应该是这样的:
expect(data.body.token).to.equal(requestBody.token)
expect(data.body.session).to.equal(requestBody.session)
我在这里的语法中遗漏了一些东西但不确定是什么:
我正在尝试打开它。但是我得到 expected undefined to equal 'pXVCJ9.eyJpYXQ'
Test.js
describe('User API', () => {
let email, password, requestBody
beforeEach(() => {
email = 'someperson@gmail.com'
password = 'password'
requestBody = {
session: '05833a20-4035',
token: 'pXVCJ9.eyJpYXQ' }
nock('https://someurl/')
.get('users/sessions')
.reply(200, requestBody)
})
it('returns user session for login', async () => {
const data = await UserApi.login(email, password)
expect(data.token).to.equal(requestBody.token)
expect(data.session).to.equal(requestBody.session)
})
})
UserApi.js
import request from 'superagent'
export const endpoint = 'https://someurl/'
const login = (email, password) => async () => {
try {
return await request
.get(`${endpoint}/users/sessions`)
.send({ email: email, password: password })
.set('Accept', 'application/json')
} catch (err) {
//todo: implement this
}
}
export default { login }
有几个问题:
const login = (email, password) => async () => { ... }
这使得 login
函数成为 return 异步函数。它本身应该是一个异步函数,所以这个:
const login = async (email, password) => { ... }
接下来,在您的 nock
设置中,您没有在路径前加上 /
,因此 nock
将无法匹配请求。轻松修复:
nock('https://someurl')
.get('/users/sessions')
.reply(...);
最后,superagent
将 return 响应数据作为 response.body
或者,在您的情况下,data.body
。所以断言应该是这样的:
expect(data.body.token).to.equal(requestBody.token)
expect(data.body.session).to.equal(requestBody.session)