2017-09-05 28 views
4

これを行う簡単な方法があるはずですが、文書化された構文はどこにも見つかりません。どのように反応成分をJestと模倣して小道具を持っていますか?

:私は私のテスト結果を乱雑リアクト警告で終わることを除いて、作品

jest.mock('./common/MultiSelect', 'MultiSelect'); 

:私は、私はこのような冗談でモックしたい小道具と反応する成分を有し警告:未知の小道具options。この小道具を要素から取り外します。

私は選択肢が下支えしていないからかってるの成分、と私は本当にそれがレンダリングされますどのように気にしないので、どのように私はそれが警告をスローしないような方法でそれを模擬することができますか?私は、モックでReact.createElementを使用し、要素名と小道具引数を持つ配列を返すことを試みました。

私はモックとしたいコンポーネントは、このように使用されます。

<MultiSelect 
options={['option 1', 'option 2']} 
/> 
+0

テスト対象のコンポーネントを表示しますか? –

答えて

2

あなたは第二引数として文字列を持つコンポーネントをからかっています。 jest.mock関数は関数を第2引数として期待しているので、これは珍しいことです。文字列はテストのために(レンダリング方法によって)動作するかもしれませんが、定義されていない動作がJest's documentationであり、おそらくあなたの問題を引き起こしています。代わりに、コンポーネントを返す関数を渡します。ここに戻ったばかりの名前を渡し、単純な機能成分を通過させる1です:

jest.mock('./common/MultiSelect',() =>() =><span>MultiSelect</span>);

+0

あなたのスナップショットに賢明にレンダリングするものが必要な場合は、ストリングを使って模擬することができますが、そうだと思います。上記の例に小道具を追加する方法を知っていますか?それが私が本当に求めているものです。 – EMC

+0

この構文は正しいですが、以下の私の答えで間違っていたことについてのいくつかの詳細。 – EMC

0

それで遊んでた後、私は私が私の返されたコンポーネントの間違った構文を気づきました。

jest.mock('../../../../../common/components/MultiSelect/MultiSelect',() =>() => <div />); 

これがないようにそれをあざける(これは私がやっていたものです):

jest.mock('../../../../../common/components/MultiSelect/MultiSelect',() => <div />); 

警告も私の問題を語ったが、私はそれを誤解:

この作品のようにそれをからかっ

警告:React.createElement:タイプが無効である - 予想ストリング またはクラス/(複合 コンポーネントの)機能が、得た(内蔵部品用):オブジェクト。レンダリング方法がTerminationであることを確認します。

関連する問題