2016-11-19 5 views
3

私はJestとスナップショットテストを行っています。私がしたいのは、コンポーネントをReactTestRendererでレンダリングし、その中のボタンをクリックしてシミュレートしてスナップショットを確認することです。ReactTestRenderer/Jestによってレンダリングされたコンポーネントとのやりとり方法

ReactTestRendererのcreate呼び出しによって返されるオブジェクトは、私が直接そのメソッドを呼び出すことができますgetInstance機能を持っていますが、ReactTestUtilsで検索/占術の方法のいずれかで動作するようには思えません。

私は手動でツリーを走査して、ボタンをクリックして、より良い方法がなければならないように思えることができます。

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import MyCounter from './MyCounter'; 
import renderer from 'react-test-renderer'; 
import {Simulate, findRenderedDOMComponentWithClass} from 'react-addons-test-utils'; 

it('should render 0',() => { 
    const component = renderer.create(<MyCounter/>); 
    const inst = component.getInstance(); 

    // Calling methods directly works, but that's not the same as 
    // simulating a click on the button... 
    inst.increment(); 

    // This also works, but it's awfully verbose... 
    component.toJSON().children[1].props.onClick(); 

    // I'm looking for something like... 
    // inst.find('.increment').click() 
    // or: 
    // Simulate.click(inst.find('.increment')) 
    // or: 
    // Simulate.click(findRenderedDOMComponentWithClass(inst, 'increment')) 

    // Finally, verify the snapshot 
    expect(component.toJSON()).toMatchSnapshot(); 
}); 

はこのようなものが存在しますか?

+0

何を使いたくない場合

inst.find('.increment').first().click() inst.closest('.increment').click() 

を探しているのは酵素です:http://airbnb.io/enzyme/ ...しかし、酵素は本当に多くの不必要なものや潜在的なボトルネックを導入するので、実際にはスナップショットを横断するツールが必要です。私は2017年の目標はただJestを使うことだと思います。 Reactがとても信頼できるのであれば、(DOMを介した)クリックをシミュレートすることは本当に必要ありません。さらに、スナップショットがステートレスコンポーネントと組み合わせて非常に強力な場合は、cssスタイルセレクタがほとんど必要ありません。そのため、すぐに小道具として使用される関数を呼び出すためのセレクタが必要なだけです。 –

答えて

0

問題はfindが配列を返すので、あなたが最初の要素またはclosest取得するfirstを使用する必要があることである:あなたが最初の要素はchildAt(index)

+0

'inst'に' find'メソッドがありません –

+0

ああ、私はあなたが酵素を使っていると思いました。 –

関連する問題