クエリを待つライブラリのテスト
これまで、我々は主にdirect queries to find elementsを使用しています.
場合によっては、問い合わせを待つ必要があります.
以下に例を示します:
の要素のフェード要素のみがユーザーインタラクション の後に表示されます要素は、ユーザアクション の後に消えるかもしれません
これに対処する最も簡単な方法は、Findbyクエリを使用しています.
それらは
ボタンにいくつかのユーザーの相互作用があるとしましょう.
クリックすると、要素を新しいテキストで再表示するのを待つ必要があります.
テストライブラリがセレクタヘルパーのみであることを覚えておいてください.そうすれば、これが真であるかどうかをチェックするために、いくつかのテストライブラリjestを使う必要があります.
場合によっては、実行する関数を待つ必要があるかもしれません.
または、多分、我々は次のことをすることができる前に、若干の時間が通るのを待つ必要があります.
これは、
たとえば、約束が拒絶を投げるまで、
また、この を上書きできます.
我々が現在行動中で
名前が示すように、要素を削除するのを待つことができます.
それは
これは1つを取ることができる、または複数の要素が削除されるのを待ちます.
私のブログを読んでくれてありがとう.私の電子メール会報を購読して、Facebook
場合によっては、問い合わせを待つ必要があります.
以下に例を示します:
の要素のフェード
Findbyクエリの使用
これに対処する最も簡単な方法は、Findbyクエリを使用しています.
それらは
getBy
とwaitFor
の組み合わせです.ボタンにいくつかのユーザーの相互作用があるとしましょう.
クリックすると、要素を新しいテキストで再表示するのを待つ必要があります.
const button = screen.getByRole('button');
button.click();
await screen.findByText('Clicked once');
button.click();
await screen.findByText('Clicked twice');
ご覧のように、2つの後者は、期待を待っているチェックに基づいている.テストライブラリがセレクタヘルパーのみであることを覚えておいてください.そうすれば、これが真であるかどうかをチェックするために、いくつかのテストライブラリjestを使う必要があります.
const button = screen.getByRole('button');
button.click();
expect(await screen.findByText('Clicked once')).toBeInTheDocument();
button.click();
expect(await screen.findByText('Clicked twice')).toBeInTheDocument();
waitforの使用
場合によっては、実行する関数を待つ必要があるかもしれません.
または、多分、我々は次のことをすることができる前に、若干の時間が通るのを待つ必要があります.
これは、
findBy
関数が便利になる場所です.これでコードをラップできます.たとえば、約束が拒絶を投げるまで、
waitFor
で約束を包むことは待ちます.await waitFor(() => {
expect(mockCall).toHaveBeenCalledTimes(1);
});
上の例では、APIを呼び出すのを待っていますが、一度だけ呼び出されたら、この手順を実行します.また、この
waitFor
にいくつかのオプションを渡すこともできます.waitFor
: HTML要素、デフォルトでは、グローバル文書container
:デフォルト1000 ms timeout
:デフォルト50 ms interval
:コンソールでコンテナとエラーを出力しますが、このonTimeout
:変更をチェックする実際の動作WaitForElementToberBervedの使用
我々が現在行動中で
mutationObserverOptions
を見たので、我々はまた、waitFor
を活用することができます.名前が示すように、要素を削除するのを待つことができます.
それは
waitForElementToBeRemoved
と同じ呼び出し署名とオプションを持ちます.これは1つを取ることができる、または複数の要素が削除されるのを待ちます.
waitForElementToBeRemoved(document.queryByRole('button')).then(() =>
console.log('Button no longer in DOM')
);
または複数の場合waitForElementToBeRemoved(document.queryAllByRole('img')).then(() =>
console.log('All images are gone')
);
そして、それは、我々が要素が現れるのを待つことができる方法であるか、修正されるか、DOMから取り除かれます.読んでいただきありがとうございます、接続しましょう!
私のブログを読んでくれてありがとう.私の電子メール会報を購読して、Facebook
Reference
この問題について(クエリを待つライブラリのテスト), 我々は、より多くの情報をここで見つけました https://dev.to/dailydevtips1/testing-library-awaiting-queries-4o49テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol