一般論として、setTimeoutの経過中のテストって書いても良いものなのでしょうか?
あるAPIを呼び出して保存に成功したら1秒だけトーストを表示させるという感じです。
api呼び出し.then(()=>{ setState({toastDisplayFlag:true}) setTimeout(()=>{ setState({toastDisplayFlag:false_) },1000) }) で、出しているトーストの文言をチェックするテストがありました。
テストコード
javascript
1fireEvent.click("API呼び出し") 2// APIの実行完了を待つ。 3await wait(()=>{ 4 expect(トーストのDOM.toBeInTheDocument() // トーストが存在するかチェック 5})
みたいな感じです。
Jestの仕様がちゃんとわかってないということもあるのですが、上記コードで成功していたのですが、ある日トーストを呼んでいる親コンポーネントのマウント時の処理に改修を加えたところエラーが出るようになりました。(トーストのDOMが見つからないというエラーです。)
原因は調べているのですがいまだにわかっていません。
ただ、一般的にsetTimeoutで一時的にしか表示させないコンポーネントに対してテストコードを記述するってありなのでしょうか?
setTimeoutで経過時間後の結果をチェックするテストとかはネットで検索していてもよく見るのですが、setTimeoutで待っている時間の状態をチェックするのはもちろんテストコード的には正しいものなのかなと思うのですが、確実に同期できるものじゃないと思うのでそもそも書くべきではないのかなと思ったのですがいかがでしょうか?(それとも確実に同期できる方法などはあるのでしょうか?)
かなり環境は古いです。
React16.8(classコンポーネントです。)
Jest24
testing-library7

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。