2017-02-15 12 views
12

私はそのようなコンポーネントを持っている:Enzymeを使用して子コンポーネントメソッドをテストする方法は?

<Parent> 
    <Child/> 
</Parent> 

<Child/>コンポーネントは、メソッドfooを持っています。私はfooメソッドをテストしたいが、私はそれにアクセスする方法を知らない。私が試した:

mount(<Parent><Child/></Parent>).props().children.foo 

または

mount(<Parent><Child/></Parent>).children().foo 

が、それらはundefinedあるの両方を。 .instance()はrootではないので使えません。 <Parent>contextに何か(react-routerのcontext.router)を追加しているので、私は<Child/>をマウントすることができず、init <Child/>のときに必要となります。これにはどんな考えですか?

+1

これはまだ不可能であるか、少なくとも複雑なものです:https://github.com/airbnb/enzyme/issues/361 – Leonardo

+0

反応成分をツリーの下側でテストしてから作業してください。また、反応したルータ上のコンポーネントの依存関係を取り除くために、アンラップしたコンポーネントのバージョンをエクスポートしてテストします。 – therewillbecode

答えて

0

あなたの問題は子コンポーネントのテスト方法とは異なると思います。

私の最初の質問は、なぜ子コンポーネントが親のコンポーネントテストで特定のメソッドを持っているかどうかチェックしていますか?

IMHOこのコンポーネントに固有のテストが必要です。このテストでは、メソッドが存在するかどうかを確認します。

回答なしで放置しないと、.find(Child).instance().fooを試しましたか?

1

私はあなたの親クラスだけのテストを書くことを考えています。そしてあなたの子供だけをテストするための別のテストファイルを考えてみましょう。

あなたが使用してあなたのコンポーネントを搭載していたら:

const component = mount(<Child>); 

あなたはそれは方法を使用していへのアクセスがあります:あなたは、その後jest.fnでオーバーライドそれを(のようなものを行うことができます

component.instance().methodname 

を)し、適切にテストする。

関連する問題