質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Jest

Jestは、JavaScriptのテストフレームワークです。設定が不要で、高速且つ安全にテストを開始できます。コードカバレッジを生成できる他、テストスコープ外のオブジェクトを容易にモック化できるなど、豊富な機能によりテストの導入を簡単にします。

ソフトウェアテスト

ソフトウェアテストは、プログラムを実行し、要求通りに正しく動作が行えているかどうか確認する作業です。プログラム中のバグをできる限り多く発見することを目標として行われます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

4815閲覧

testing-library : await waitFor(() => でテストが通りません

Mirak

総合スコア6

Jest

Jestは、JavaScriptのテストフレームワークです。設定が不要で、高速且つ安全にテストを開始できます。コードカバレッジを生成できる他、テストスコープ外のオブジェクトを容易にモック化できるなど、豊富な機能によりテストの導入を簡単にします。

ソフトウェアテスト

ソフトウェアテストは、プログラムを実行し、要求通りに正しく動作が行えているかどうか確認する作業です。プログラム中のバグをできる限り多く発見することを目標として行われます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2021/12/05 15:40

前提・実現したいこと

Reactコンポーネントのテストを Jest + testing-library を使って書いています。
セレクトボックスの値が変更されることをテストコードで書いていて以下のエラーが発生しました。

発生している問題・エラーメッセージ

TestingLibraryElementError: Unable to find an element with the display value: First

該当のソースコード

<Select>というセレクトボックスのコンポーネントに配列形式でcategoryという Props を渡すと、option にカテゴリとして選択項目が追加されます。デフォルトでは '選択してください' という項目が表示されています。

typescript

1const categories = [ 2 { 3 id: 1, 4 name: 'First', 5 }, 6 { 7 id: 2, 8 name: 'Second', 9 description: 'Second', 10 }, 11] 12 13const onSubmit = jest.fn() 14 15// テストコード 16describe('<Select />', () => { 17 test('セレクトボックスの値が変更される', async () => { 18 render( 19 <CategorySelect 20 categories={categories} 21 onSubmit={onSubmit} 22 /> 23 ) 24 25 const selectCategory = screen.getByDisplayValue('選択してください') 26 fireEvent.change(selectCategory, { target: { value: '1' } }) //1番目のoptionを選択 27 28 await waitFor(() => expect( 29 screen.getByDisplayValue(categories[0].name) 30 ).toBeInTheDocument()) <- この部分で上記のエラーメッセージが出ます

試したこと

getByDisplayValueと await 句を使うことでテストが失敗します。
1.getByDisplayValuegetByTextに書き換えたところ、テストがパスします。
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。waitFor はやはり await を先頭に付けないとちゃんと中身がテストされないようです。

https://stackoverflow.com/questions/65606979/testing-library-react-rtl-waitfor-makes-only-success-without-await-keyword

投稿2021/12/11 07:13

Mirak

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問