前提・実現したいこと
Reactコンポーネントのテストを Jest + testing-library を使って書いています。
セレクトボックスの値が変更されることをテストコードで書いていて以下のエラーが発生しました。
発生している問題・エラーメッセージ
TestingLibraryElementError: Unable to find an element with the display value: First
該当のソースコード
<Select>
というセレクトボックスのコンポーネントに配列形式でcategory
という Props を渡すと、option にカテゴリとして選択項目が追加されます。デフォルトでは '選択してください' という項目が表示されています。
typescript
const categories = [ { id: 1, name: 'First', }, { id: 2, name: 'Second', description: 'Second', }, ] const onSubmit = jest.fn() // テストコード describe('<Select />', () => { test('セレクトボックスの値が変更される', async () => { render( <CategorySelect categories={categories} onSubmit={onSubmit} /> ) const selectCategory = screen.getByDisplayValue('選択してください') fireEvent.change(selectCategory, { target: { value: '1' } }) //1番目のoptionを選択 await waitFor(() => expect( screen.getByDisplayValue(categories[0].name) ).toBeInTheDocument()) <- この部分で上記のエラーメッセージが出ます
試したこと
getByDisplayValue
と await 句を使うことでテストが失敗します。
1.getByDisplayValue
をgetByText
に書き換えたところ、テストがパスします。
2.また、waitFor(() =>
の前の await を記述しないでおくと、getByDisplayValue
でもテストがパスします。
そこで、2の方法で await を記述せずwaitFor(() =>
のみを書いたテストコードをレビューに提出したところ、await
句が必須であると指摘されました。
セレクトボックスの中の値は getByText
ではなく getByDisplayValue
で取得した方がよいと考えているのですが、上記のテストが通らない原因には何が考えられるのでしょうか?
また、testing-library のwaitFor
を使う際は await 句は必須でしょうか?
testing-libraryに詳しい方、お力を貸していただけると幸いです。
補足情報(FW/ツールのバージョンなど)
React v.17
testing-library/react v11.2.2
まだ回答がついていません
会員登録して回答してみよう