Тело суперагента ответа не определено до следующей строки - PullRequest
1 голос
/ 11 апреля 2020

Я тестирую свой express API, используя Jest и Supertest. По какой-то причине это не работает:

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

1 Ответ

1 голос
/ 11 апреля 2020

В первом случае вы читаете атрибуты из возвращаемого значения expect(201).

Поскольку возвращаемое значение не имеет атрибута body, происходит сбой при попытке прочитать id свойство от него.

Во втором случае вы читаете body.id из ответа вашего сервера. Когда вы возвращаете объект с атрибутом id, вы можете прочитать его.

Если вы хотите проверить, что ваш метод возвращает объект со свойством id, вы можете сделать это с помощью:

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