在 mocha 测试错误上记录响应正文?

Log response body on mocha test errors?

当 运行 mocha 测试使用 npm run test 时,是否可以在测试失败并出现错误时打印响应正文的内容?

chai.request(server)
  .post('/')
  .set('X-Access-Token', testUser.accessToken)
  .send(fields)
  .end((error, response) => {
    console.log(response.body);       // log this!
    response.should.have.status(201); // if this fails!
    done();
  });
});

换句话说,afterEach 函数可以访问每个测试的 errorresponse 吗?

afterEach(function(error, response) {
  if (error) console.log('afterEach', response.body);
});

我们在响应中收到了有用的错误消息,因此我们发现自己将 console.log 行粘贴到失败的测试中以进行调试。如果总是在每个错误上看到 response.body 就好了。

OP 在这里 - 我想出了一个答案,我想我会把它留在这里,直到有人想出更好的答案。

它不理想的原因是它在每个测试中都需要一行,它用该测试的响应更新共享变量 currentResponse。但是如果你的测试跨越很多文件,你可以在你的设置脚本中维护一个全局变量:

// you can use a global variable if tests span many files
let currentResponse = null; 

afterEach(function() {
  const errorBody = currentResponse && currentResponse.body;

  if (this.currentTest.state === 'failed' && errorBody) {
    console.log(errorBody);
  }

  currentResponse = null;
});

然后您的每个测试都会更新当前响应,因此我们可以在 afterEach 中记录它,以防它失败。

describe('POST /interests', () => {
  it('400s if categoryName field is not present in the category', done => {
    const fields = [
      { language: 'en' },
    ];

    chai.request(server)
      .post('/interests')
      .set('X-Access-Token', testUser.accessToken)
      .send(fields)
      .end((error, response) => {
        currentResponse = response; // update it here
        response.should.have.status(400);
        done();
      });
  });

这将在出现错误时输出响应,因此您可以看到服务器返回的内容。