反応コンポーネント内のメソッドをテストしようとしています。コンポーネントはフォームであり、送信ボタンをクリックするとhandleSubmit()メソッドが呼び出されます。私は以下を試しました。 。wrapper.instance()handleSubmitは冗談モック関数ではないので、最初のブロックに障害が発生したExpected mock function to have been called
jestと酵素によるカスタム反応メソッドのテスト
2
A
答えて
5
言っ
it('handlesSubmit when submit button is clicked',() => {
const handleSubmit = jest.fn();
wrapper.find(Button).simulate('click');
expect(handleSubmit).toHaveBeenCalled();
})
このエラー:
it('handlesSubmit when submit button is clicked',() => {
wrapper.find(Button).simulate('click');
expect(wrapper.instance().handleSubmit).toHaveBeenCalled();
})
これは、だから私はこれを試してみましたjest.fn() value must be a mock function or spy.
エラーを与えました;それはクラスメソッドがそれを定義するものである。
handleSubmitはjestモック関数ですが、ラッパーコンポーネントにまったく結び付けられていないため、2番目のブロックは失敗します。これはローカル変数です。クリックをシミュレートすると、再び実際の実装が呼び出されます。
あなたがやろうとしているものを達成するために、あなたはWrapperComponentは、あなたがテストしているコンポーネントであるこの
it('handlesSubmit when submit button is clicked',() => {
const handleSubmit = jest.fn();
WrapperComponent.prototype.handleSubmit = handleSubmit;
const wrapper = shallow(<WrapperComponent />);
wrapper.find(Button).simulate('click');
expect(handleSubmit).toHaveBeenCalled();
})
ような何かをしなければなりません。
上記はうまくいくはずですが、場合によってはもっと似たような方法で達成できます。コンポーネントの実装によっては、handleSubmitメソッド自体ではなく、handleSubmitメソッド内の機能が呼び出されることをテストすることはたいてい簡単です。私のコンポーネントが
class TestComponent extends React.Component {
constructor(props) {
super(props)
this.state = { clicked: false }
this.onClick = this.onClick.bind(this)
}
onClick() {
this.props.onClick()
this.setState({ clicked: true })
}
render() {
return (
<button onClick={ this.onClick }>
{ 'Click Me' }
</button>
)
}
}
のようなものだった場合たとえば、私はプロトタイプを上書きする必要はありませんので、私は一般的に、テストのこのタイプを好む、それが実際にある
it('calls onClick props and sets clicked state to true when clicked',() => {
const onClick = jest.fn();
const testComp = shallow(<TestComponent onClick={ onClick } />);
wrapper.find('button').simulate('click');
expect(onClick).toHaveBeenCalled();
expect(testComp.state('clicked')).toBe(true)
})
を行うことによって、それをテストすることができクリックが期待するロジックをトリガーすることをテストします。オリジナルのテストでは、実際には、this.handleSubmitをonClick小道具としてButtonコンポーネントに渡しているだけです。
関連する問題
- 1. jestと酵素との反応でフォームをテストする
- 2. トリガイベントkeyDown contenteditable要素(テスト+反応+ jest +酵素)
- 3. 酵素/反応単位テスト
- 4. 酵素、モカ、およびレールによる反応テストのセットアップ
- 5. 酵素との反応
- 6. 酵素のエラーで反応した反応テスト
- 7. 酵素を含むカスタムJestシリアライザ
- 8. ユニットテストa反応成分 - 酵素、酵素
- 9. 反応ルータを酵素でテストするには
- 10. 酵素/反応/ Redux - 不変の違反。
- 11. Jestと酵素によるIndexedDBテスト - ReferenceError:indexedDBが定義されていません
- 12. 酵素テスト/ stopImmediatePropogationのためのkeyDown(shift)のための反応
- 13. 酵素で反応成分classNameをテストする
- 14. 害虫/酵素による反応成分の試験
- 15. テスト酵素
- 16. テストJestと非同期で反応し、作成する - 反応 - アプリケーション
- 17. モカ、酵素:酵素を用いた反応成分のカスタムテスト機能ユニット
- 18. 酵素と反応するintl成分を調べる
- 19. ReactJSのjestと酵素を使用してコールバック関数をテストしますか?
- 20. 反応+酵素で要素テキストを選択する方法
- 21. 反応ルータを含む試験成分酵素とのリンク
- 22. 反応仮想化はairbnb /酵素と機能しますか?
- 23. 酵素:浅いが、内側に反応-Reduxのコンポーネントをレンダリング
- 24. 酵素と反応する成分と文脈との反応:空の物体を返す
- 25. 酵素とジャスミンとの反応単位テストのためのコンポーネントの小道具をシミュレートする方法
- 26. 反応+酵素単位のテストは、window.addEventListenerにアクセスすることはできません
- 27. 試験は酵素でネイティブフラットリストに反応します
- 28. 子要素内の反応とメソッド
- 29. Jestを使って反応ルータv4からリンクをテストする
- 30. 酵素マウントを使用して反応した子成分と反応する成分を試験する