はじめに
Jestでエラー処理をテストするときによくやるやつ。
Promise中にエラーを投げる例外処理があるとして、それをテストするやり方。
いつもうろ覚え状態なので書いておく。
やり方
ここに載ってる。
https://jestjs.io/docs/en/tutorial-async#rejects
こんなPromiseの処理があるとして、
PromiseFunc.ts
export default class PromiseFunc {
constructor() {}
public async helloAsync(name) {
if(!name) throw new Error('name is empty');
return new Promise((resolve) => {
resolve('Hello ' + name);
});
}
}
こんな風に使ってるとする。
Hello.ts
import promiseFunc from './PromiseFunc';
const main = async () => {
try {
const func = new promiseFunc();
const res = await func.helloAsync('bathtimefish');
console.log(res);
} catch(e) {
console.error(e);
}
};
main();
PromiseFunc.test.ts
のテストはこんな感じ。
PromiseFunc.test.ts
import promiseFunc from '../PromiseFunc';
describe('PromiseFunc', () {
it('should get greeting', async () => {
const func = new promiseFunc();
const res = await func.helloAsync('bathtimefish');
expect(res).toBe('Hello bathtimefish');
// await (expect(func.helloAsync('bathtimefish'))).resolves.toEqual('Hello bathtimefish');
});
it('should throw error because of name is empty', async () => {
const func = new promiseFunc();
await expect(func.helloAsync(null)).rejects.toEqual(new Error('name is empty'));
});
});
rejects 便利。正常系のテストも上記でコメントしてるようにresolveを使う手があるんだけど、個人的にはtoBe
のほうが平滑な感じがして好き。