2017-06-24 65 views
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); 
      }); 
     }); 
     }); 

回答

0

解決的辦法是插入一個

/* 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 | %分支| %Funcs | %行|未覆蓋的行| - | ---------- | ---------- | ---------- | ---------- | --- ------------- | | 100 | 100 | 100 | 100 | 100 |

+1

你實際上應該測試其他的,不要忽略它。注入一個不是'ValidationError'的錯誤,看看執行else塊是否工作。 – slebetman

+0

是的..我應該..但其他任何錯誤都會涉及到MongoDB中的save()文件,我不知道如何編寫一個測試....任何鏈接? – erwin

+0

@erwin我遇到了這個SO問題,因爲我面對同樣的問題'istanbul'報告錯誤的代碼覆蓋率。請讓我知道你是否找到了解決辦法。我同意@slebetman:爲了報道你不應該忽視。如果你正在使用'sinon'作爲stubbing/spying/mocking,你可以在'examples /'下查看[sinon-mongoose](https://github.com/underscopeio/sinon-mongoose)。這應該給你一些想法來做什麼@slebetman推薦 – Vikram

相關問題