Node.js ES6伊斯坦布尔代码覆盖率:如何正确测试分支
我不明白测试覆盖率是如何处理这个.catch()分支的: 我正在正确测试第一个块: 如果(e.name=='ValidationError'&&e.errors.username.kind=='unique'){…) 我没有对第二个else块进行测试,所以我添加了一个ignorenext语句: 否则{ /*伊斯坦布尔下一站*/ 其次(e); } 代码覆盖率将第58行(如果…)报告为未覆盖Node.js ES6伊斯坦布尔代码覆盖率:如何正确测试分支,node.js,mocha.js,istanbul,nyc,Node.js,Mocha.js,Istanbul,Nyc,我不明白测试覆盖率是如何处理这个.catch()分支的: 我正在正确测试第一个块: 如果(e.name=='ValidationError'&&e.errors.username.kind=='unique'){…) 我没有对第二个else块进行测试,所以我添加了一个ignorenext语句: 否则{ /*伊斯坦布尔下一站*/ 其次(e); } 代码覆盖率将第58行(如果…)报告为未覆盖 | % Stmts | % Branch | % Funcs | % Lines |Uncovere
| % 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);
});
});
});
解决方案是插入一个
/* istanbul ignore else */
如下
.catch(
(e) => {
/* istanbul ignore else */
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 {
next(e);
}
})
那么代码覆盖率输出是100%
|%Stmts |%Branch |%Funcs |%Lines |未覆盖的行|
-|----------|----------|----------|----------|----------------|
|100 | 100 | 100 | 100 |解决方案是插入
/* istanbul ignore else */
如下
.catch(
(e) => {
/* istanbul ignore else */
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 {
next(e);
}
})
那么代码覆盖率输出是100%
|%Stmts |%Branch |%Funcs |%Lines |未覆盖的行|
-|----------|----------|----------|----------|----------------|
|100 | 100 | 100 | 100 | 100 |您应该实际测试else,不要忽略它。注入一个不是
ValidationError
的错误,并查看是否执行else块工作。是的..我应该..但任何其他错误都与save()相关MongoDB中的文档,我不知道如何为它编写测试…有链接吗?@erwin我遇到了这个问题,因为我面临同样的问题伊斯坦布尔报告了错误的代码覆盖率。请告诉我您是否找到了一些解决方案。我同意@slebetman:为了覆盖率,您不应该忽略。如果您重新使用sinon
进行stubing/spying/mock,您可以在examples/
下查看。这会让您了解如何执行@slebetman建议的操作您应该实际测试else,不要忽略它。插入一个不是ValidationError
的错误,并查看是否执行else块工作。是的..我应该..但是任何其他错误都与save()相关MongoDB中的文档,我不知道如何为它编写测试…有链接吗?@erwin我遇到了这个问题,因为我面临同样的问题伊斯坦布尔报告了错误的代码覆盖率。请告诉我您是否找到了一些解决方案。我同意@slebetman:为了覆盖率,您不应该忽略。如果您重新使用sinon
进行stubing/spying/mocking,您可以在示例/
下查看。这会让您了解@slebetman推荐的方法