Javascript 获取async/Wait以使用superagent

Javascript 获取async/Wait以使用superagent,javascript,asynchronous,ecmascript-6,async-await,superagent,Javascript,Asynchronous,Ecmascript 6,Async Await,Superagent,我在这里的语法中遗漏了一些东西,但不确定是什么: 我正试图打破这一切。但我得到预期未定义为等于'pXVCJ9.eyJpYXQ' Test.js describe('User API', () => { let email, password, requestBody beforeEach(() => { email = 'someperson@gmail.com' password = 'password' requestBody

我在这里的语法中遗漏了一些东西,但不确定是什么:

我正试图打破这一切。但我得到
预期未定义为等于'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)
    })
})
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 }
UserApi.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)
    })
})
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
成为一个返回异步函数的函数。它本身应该是一个异步函数,因此:

const login = async (email, password) => { ... }
接下来,在
nock
设置中,您没有在路径前面加
/
,因此
nock
将无法匹配请求。简易修复:

  nock('https://someurl')
    .get('/users/sessions')
    .reply(...);
最后,
superagent
将响应数据作为
response.body
返回,或者在您的情况下,
data.body
返回。因此断言应该如下所示:

expect(data.body.token).to.equal(requestBody.token)
expect(data.body.session).to.equal(requestBody.session)

谢谢罗伯特,我没有特别意识到第一个问题