React / Jestユニットテストでは、モックされたコンポーネントによって呼び出されるイベントプロップをどのようにシミュレートしますか?

ジョナサン

ユーザー名フィールドを持つログインフォームであるReactコンポーネントがあるとします。ユーザーがユーザー名を空白の文字列に設定すると、コンポーネントにエラーメッセージが表示されます。

コードは次のとおりです。

const LoginForm = () => {
  const [errorMessage, setErrorMessage] = useState(''),
    handleOnChangeUsername = (newUsername: string) => {
      if (newUsername.trim() === '') {
        setErrorMessage('Username is required.');
      } else {
        setErrorMessage('');
      }
    };

  return (
    <form>
      <UsernameField onChange={handleOnChangeUsername} />
      {errorMessage && <Error message={errorMessage} />}
    </form>
  );
};

このコンポーネントをユニットテストしたいと思います。

したがって、ユーザーが空白のユーザー名を入力すると、エラーメッセージ「ユーザー名が必要です」が下に表示されることを確認するテストを作成したいと思います。

この単体テストを作成するには、次のことを行う必要があると思います。

  1. LoginFormコンポーネントをマウントし、モックされたUsernameFieldコンポーネントを提供します。

  2. モックされたUsernameFieldコンポーネントを取得して、そのonChangeプロパティを呼び出し、空白の文字列を渡します。

  3. LoginFormコンポーネントがエラーコンポーネントをレンダリングしていることを表明します(つまり、handleOnChangeUsernameのコードが実際に実行され、正しい副作用が発生したことを確認します)。

モック部分は簡単です。モジュールへのパスとモック実装を渡すだけで、jest.mock(...)を呼び出します。

トリッキーなビットはステップ2です。空の文字列で呼び出されるonChangeをシミュレートするために、ユニットテストでモックに独自の小道具の1つを呼び出させるにはどうすればよいですか?

ユニットテストコードがモックされたコンポーネントの内部小道具と通信できるチャネルが必要になるようです。

React / Jestユニットテストでこれを行う簡単なおよび/または慣用的な方法はありますか?

注:この質問は、モキストスタイルを想定しています一部の開発者は、ユーザー名コンポーネントがレンダリングするDOM要素を操作して、ユーザー名onChangeを直接トリガーする必要があると言うかもしれません。私はすでにそれを行う方法を知っています。しかし、私はモキストスタイルに従い、ユーザー名コンポーネントを完全にモックしたいと思います。

ジョナサン

わかりました、私は小道具にアクセスする少なくとも1つの方法を見つけたようです。ただし、酵素が必要です。酵素なしでこれを行う方法はまだわかりません。

Enzymeのラッパーには、ラップされたコンポーネントの小道具を返すprops()メソッドが含まれています。

だから私はこれを書くことができます:

const root = mount(<LoginForm />);
root.find("UsernameField").props().onChange("");
expect(root.find("Error").exists()).toBeTruthy();

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ