1
我不明白的测试覆盖率是怎么处理这个.catch()分支:ES6伊斯坦布尔代码覆盖率:如何正确测试分支
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);
}
});
我正确地测试第一块:
如果(e.name === 'ValidationError' & & e.errors.username.kind === '独特'){...)
,我没有测试第二else块,所以我添加了一个忽略下一条语句:
else { /* istanbul ignore next */ 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);
});
});
});
你实际上应该测试其他的,不要忽略它。注入一个不是'ValidationError'的错误,看看执行else块是否工作。 – slebetman
是的..我应该..但其他任何错误都会涉及到MongoDB中的save()文件,我不知道如何编写一个测试....任何链接? – erwin
@erwin我遇到了这个SO问题,因为我面对同样的问题'istanbul'报告错误的代码覆盖率。请让我知道你是否找到了解决办法。我同意@slebetman:为了报道你不应该忽视。如果你正在使用'sinon'作为stubbing/spying/mocking,你可以在'examples /'下查看[sinon-mongoose](https://github.com/underscopeio/sinon-mongoose)。这应该给你一些想法来做什么@slebetman推荐 – Vikram