首页 > 解决方案 > 在 Jest 中测试失败时如何打印请求和响应?

问题描述

我正在使用 Supertest 和 Jest 来测试 Node.js API。

样本测试具有以下格式

it('Read a note for a user', (done) => {
      request(graphqlURL)
        .post('/graphql')
        .set(baseHeaders())
        .send({
          query: graphQLQuery
        })
        .end((err, res) => {
          expect(res.status).toBe(200);          
          done();
        })

    });

当前,当期望失败时,将记录以下内容

expect(received).toBe(expected) // Object.is equality

    Expected: 200
    Received: 404

我还想在失败的测试旁边记录请求和响应,以便在调试时获得更多上下文。

有没有办法只打印那些失败的测试?

标签: node.jsjestjssupertest

解决方案


expect通过Error在期望失败时抛出一个来工作。

message属性Error是在测试报告中打印的内容。

我想如果您想使用现有的期望并且只想使用可以捕获的附加数据来增加失败消息Error,将附加数据附加到message属性,然后像这样再次抛出Error

it('Read a note for a user', (done) => {
  request(graphqlURL)
    .post('/graphql')
    .set(baseHeaders())
    .send({
      query: graphQLQuery
    })
    .end((err, res) => {
      try {
        expect(res.status).toBe(200);
      } catch (err) {
        // --- add additional data to the error message here ---
        err.message = `${err.message}\n\nfailing query: ${graphQLQuery}`;
        throw err;  // throw the error so test fails as expected
      }
      done();
    })
});

推荐阅读