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