非同期処理のテスト
date
Aug 10, 2023
repo_url
slug
async-test
status
Published
summary
type
Post
thumbnail_url
tags
jest
outer_link
非同期テストの書き方はいくつかある。
テスト対象の関数
引数に待ち時間を与えて、その値の分だけ待って、経過時間を返り値としてresolveする。
export function wait(duration: number) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(duration);
}, duration);
});
}
Promiseをreturnする書き方
Promiseを返しthenに渡す関数内にアサーションを書く方法。
wait()を実行すると、Promiseインスタンスが生成されるので、それをテスト関数の戻り値としてreturnすることで、Promiseが解決するまでテストの判定を待つ。
test("指定時間待つと、経過時間をもって resolve される", () => {
return wait(50).then((duration) => {
expect(duration).toBe(50);
});
});
resolvesを仕様したアサーションをreturnする方法
wait()がresolveしたときの値を検証したい場合、上記の方法よりシンプルに書ける。
test("指定時間待つと、経過時間をもって resolve される", () => {
return expect(wait(50)).resolves.toBe(50);
});
async/await を使った書き方
test("指定時間待つと、経過時間をもってresolveされる",async()=>{
await expect(wait(50)).resolve.toBe(50);
});
検証値のPromiseが解決するのを待ってから、アサーションに展開する方法。
この方法の場合、他の非同期処理のアサーションも、1つのテスト関数内に収めることができる。
test("指定時間待つと、経過時間をもってresolveされる",async()=>{
expect(await wait(50)).toBe(50);
});