catchが処理すると確信できるエラーがある場合、Jestでtry / catchブロックをテストするにはどうすればよいですか?たとえば、別のファイルからトークンを読み取るためにこのコードをテストしたいと思います。キャッチをテストしたいのですが、問題は、Jestでエラーを処理するためにJestでシチュエーションを作成する方法がわからないことです。
const readToken = async () => {
try{
const readFile = await fs.readFile('./apiData.json');
const data = JSON.parse(readFile);
return data.token;
}catch(err){
throw err;
}
}
これは私のJestコードですが、正しく機能していません。カバレッジでcatch(err)の行がカバーされていないことを示しているためです。
it('should return catch error',async (done) => {
try{
await readToken()
done()
}catch(e){
done(e);
}
})
あなたはfs.readFile
それをあなたにエラーを投げさせるためにモックすることができます:
it('should handle a readFile error', async () => {
jest.spyOn(fs, 'readFile')
.mockImplementation(async () => { throw new Error('Some error'); });
await expect(readToken()).rejects.toThrowError();
fs.readFile.mockRestore()
});
JSON.parseでも同じことができます。
it('should handle a JSON.parse error', async () => {
jest.spyOn(JSON, 'parse')
.mockImplementation(() => { throw new Error('Some error'); });
await expect(readToken()).rejects.toThrowError();
JSON.parse.mockRestore()
});
これらのテストはどちらも、catchブロックのコードを実行して、テストカバレッジを向上させます。エラーをcatchブロックで再度スローするのではなく、コンソールにログを記録する場合は、次のようにテストできます。
it('should handle a readFile error', async () => {
jest.spyOn(fs, 'readFile')
.mockImplementation(() => { throw new Error('Some error'); });
jest.spyOn(console, 'error')
.mockImplementation();
await readToken();
expect(console.error).toHaveBeenCalled();
jest.restoreAllMocks();
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加