直到下一行才定义超级代理响应主体

Superagent response body undefined until next line

我正在使用 Jest 和 Supertest 测试我的快递 API。由于某种原因,这不起作用:

const id = await request.post('/program')
    .send(body)
    .expect('Content-Type', /json/)
    .expect(201).body.id;

失败并出现错误:

TypeError: Cannot read property 'id' of undefined

  154 |             sessionId: defaults.authorId
  155 |         };
> 156 |         const id = await request.post('/program')
      |                           ^
  157 |             .send(body)
  158 |             .expect('Content-Type', /json/)
  159 |             .expect(201).body.id;

  at Object.<anonymous> (tests/program.test.js:156:27)

但是,只需将 .body.id 移动到下一行即可解决问题。

const res = await request.post('/program')
    .send(body)
    .expect('Content-Type', /json/)
    .expect(201);

const id = res.body.id;

为什么会这样?请求是否未 await 正确编辑?

在第一种情况下,您正在从 expect(201) 的 return 值中读取属性。

由于 return 值没有 body 属性,当您尝试从中读取 id 属性 时它会崩溃。

在第二种情况下,您正在从服务器的响应中读取 body.id。当您 return 使用 id 属性的对象时,您可以读取它。

如果您想检查您的方法是否正在 returning 一个带有 id 属性 的对象,您可以这样做:

const res = await request.post('/program')
    .send(body)
    .expect('Content-Type', /json/)
    .expect({ id: 201 });