備忘録のメモです.
以下の環境でテストを書いてたら、Jestの終了に時間がかかりメッセージが出力されてました.
- @firebase/testing
0.16.5
- @firebase/functions
0.4.29
- Jset
24.9.0
以下の様なメッセージになってるため、非同期処理がうまくできてない感じだけは分かった.
Jest did not exit one second after the test run has completed.
This usually means that there are asynchronous operations that weren't stopped in > your tests. Consider running Jest with
--detectOpenHandles
to troubleshoot this issue.
Jestのドキュメントと、@firebase/functions のコードを読みあさって以下の仕様を見つけました.
- Jestは結果の取得に1秒以上かかると警告が出る
- Jsetのテストのタイムアウトはデフォルトだと5秒
-
@firebase/functions
のhttpsCallable
のタイムアウトは70秒
1秒未満で終了させれば警告が出なくなるので以下の様に書き直せばOKです
ここでは900msに設定しました.
const testFuncs = firebase.initializeTestApp(config);
const functions = testFuncs.functions();
functions.useFunctionsEmulator("http://localhost:5001");
// timeoutを指定
const func = functions.httpsCallable('func', { timeout: 900 });
const res = await func({ path: "hello" });
1秒未満でどうしてもタイムアウトする場合は、 --detectOpenHandles
を指定してタイムアウトを伸ばす方法もあります.