在 Jest 中测试失败时如何打印请求和响应?

dsi*_*cos 5 node.js supertest jestjs

我正在使用 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();
        })

    });
Run Code Online (Sandbox Code Playgroud)

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

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

    Expected: 200
    Received: 404

Run Code Online (Sandbox Code Playgroud)

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

有没有办法打印那些,仅用于失败的测试?

Bri*_*ams 10

expectError当期望失败时抛出 an 来工作。

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();
    })
});
Run Code Online (Sandbox Code Playgroud)