「ハッピー」パスをテストすることは、失敗をテストすることも同然です。良いテストコードカバレッジは、例外パスをテストすることを要求します。さもなければ、例外が実際に正しく処理されるという信用はありません。Mocha や Chai といったすべてのユニットテストフレームワークは、例外テストをサポートしています(下記のコード例参照)。もしすべての内部関数や例外をテストすることが面倒だと感じたら、REST API の HTTP エラーのみをテストすることに落ち着くかもしれません。
Javascript
describe('Facebook chat', () => {
it('Notifies on new chat message', () => {
const chatService = new chatService();
chatService.participants = getDisconnectedParticipants();
expect(chatService.sendMessage.bind({ message: 'Hi' })).to.throw(ConnectionError);
});
});
Typescript
describe('Facebook chat', () => {
it('Notifies on new chat message', () => {
const chatService = new chatService();
chatService.participants = getDisconnectedParticipants();
expect(chatService.sendMessage.bind({ message: 'Hi' })).to.throw(ConnectionError);
});
});
Javascript
it('Creates new Facebook group', () => {
const invalidGroupInfo = {};
return httpRequest({
method: 'POST',
uri: 'facebook.com/api/groups',
resolveWithFullResponse: true,
body: invalidGroupInfo,
json: true
}).then((response) => {
expect.fail('if we were to execute the code in this block, no error was thrown in the operation above')
}).catch((response) => {
expect(400).to.equal(response.statusCode);
});
});
Typescript
it('Creates new Facebook group', async () => {
let invalidGroupInfo = {};
try {
const response = await httpRequest({
method: 'POST',
uri: 'facebook.com/api/groups',
resolveWithFullResponse: true,
body: invalidGroupInfo,
json: true
})
// このブロックで下記コードを実行した場合、上記オペレーションではエラーが発生しなかったことを意味します
expect.fail('The request should have failed')
} catch(response) {
expect(400).to.equal(response.statusCode);
}
});