在 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
函数可以访问每个测试的 error
和 response
吗?
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();
});
});
这将在出现错误时输出响应,因此您可以看到服务器返回的内容。
当 运行 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
函数可以访问每个测试的 error
和 response
吗?
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();
});
});
这将在出现错误时输出响应,因此您可以看到服务器返回的内容。