我不明白测试覆盖率如何处理这个 .catch() 分支:
newUser.save()
.then((savedUser) => {
res.json(savedUser);
})
.catch(
(e) => {
if (e.name === 'ValidationError' && e.errors.username.kind === 'unique') {
res.status(409);
res.json({ error: { message: 'Existing user', field: e.errors.username.path, value: e.errors.username.value } });
} else {
/* istanbul ignore next */
next(e);
}
});
我正在正确测试第一个块:
if (e.name === 'ValidationError' && e.errors.username.kind === 'unique') {...)
而且我没有测试第二个 else 块,所以我添加了一个忽略下一条语句:
else { /* 伊斯坦布尔忽略下一个 */ next(e); }
代码代码覆盖率报告第 58 行。(如果..)未覆盖..
| % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines |
-|----------|----------|----------|----------|----------------|
| 100 | 93.75 | 100 | 100 | 58 |
但是以下测试正在正确执行,涵盖了这一行......
describe('# POST /api/v1/users', () => {
it('should NOT create a duplicated user', () => {
return request(app)
.post('/api/v1/users')
.set('Authorization', superAdminJwtToken)
.send(newUser)
.expect(httpStatus.CONFLICT)
.then((res) => {
expect(res.body.error.message).to.equal('Existing user');
expect(res.body.error.field).to.equal('username');
expect(res.body.error.value).to.equal(newUser.username);
});
});
});