テキスト入力のテキストをどのように設定し、その値をReact/Enzymeでテストしますか?
const input = wrapper.find('#my-input');
input.simulate('change',
{ target: { value: 'abc' } }
);
const val = input.node.value;
//val is ''
すべての ここの解決策 は機能していないようです。
コードで何が起こっているかを本当に理解するには、コンポーネントコード(具体的にはonChange
ハンドラー)を見ると便利です。
ただし、次のコードに関しては:
_input.simulate('change', {target: {value: 'abc'}});
_
これは実際には_<input />
_要素の値を変更せず、代わりにonChange
関数が実行され、_{target: {value: 'abc'}}
_のようなイベントオブジェクトが提供されるだけです。
アイデアは、onChange
関数が状態またはストアを更新するため、この関数をトリガーすると、DOMが更新されるはずです。 input.simulate('change')
を使用して定義されたonChange
ハンドラーが実際にない場合は何もしません。
したがって、入力の値を実際に設定し、onChange
ハンドラーをトリガーしないことが目標の場合、JSを使用してwrapper.find('#my-input').node.value = 'abc';
などの方法でDOMを手動で更新できますが、これはReactのレンダーサイクルを実行します。再レンダーをトリガーするために何かを行うと、この値がクリア/削除される可能性があります。
私はここで_React 16
_と_Enzyme 3.10
_を使用していますが、これは完全に機能しました(そこに多くの異なる提案を試みた後):
_wrapper.find("input").instance().value = "abc";
_
どうやら、以前のバージョンでは、getNode()
の代わりにnode
またはinstance()
を使用できました。これは以前の多くの試みの一部でした。
これは、酵素3と酵素2の両方で機能します。
_wrapper.find('input').getDOMNode().value = 'new value';
wrapper.find('input').simulate('change');
_
.getDOMNode()
は、Enzyme 2では_.node
_のように使用でき、Enzyme 3では.instance()
のように使用できます.
ここで私のために働く..
値を更新して、入力テキストを変更しました。そしてDOMプロパティを更新。
.update()
更新後、入力携帯電話番号の長さのユースケースでボタン無効化プロパティをチェックしています。
const input = MobileNumberComponent.find('input')
input.props().onChange({target: {
id: 'mobile-no',
value: '1234567900'
}});
MobileNumberComponent.update()
const Footer = (loginComponent.find('Footer'))
expect(Footer.find('Buttons').props().disabled).equals(false)