私は、PersonalDetailsという子コンポーネントをレンダリングするReactクラスを持っています。コードは正常に動作しますが、フィールドでEnterキーが押されたときにsaveDataが正しく呼び出されたことをJestに確認させることはできません。私はPersonalDetailsに渡されたSaveDataを機能を嘲笑しているが、アサーションはモックに(コードが簡潔にするために凝縮)失敗:問題のテストのリアクション関数がJestで呼び出された
class PersonalDetails extends React.Component {
constructor(props) {
super(props);
this.handleNameChange = this.handleNameChange.bind(this);
}
render() {
return (
<div>
<input onKeyPress={this.handleNameChange}
defaultValue={this.props.name}/>
</div>
)
}
handleNameChange(event) {
if (event.nativeEvent.keyCode != 13) return;
this.props.saveData('name',event.target.value)
}
}
冗談のテストケースを次のように
class Home extends React.Component {
constructor(props) {
super(props);
this.state = {
name: null
};
this.saveData = this.saveData.bind(this);
}
render() {
return (
<div>
<PersonalDetails name={this.state.name} saveData={this.saveData}/>;
<OtherThing saveData={this.saveData}/>
</div>
)
}
saveData(key, value){
var d = {};
d[key] = value;
this.setState(d)
}
}
PersonalDetailsモジュールがあります:
it("saves data on change", function() {
var saveData = jest.genMockFunction(); // mocking saveData
const pdComponent = TestUtils.renderIntoDocument(
<PersonalDetails saveData={saveData} name="My Name"/>
);
var input = TestUtils.findRenderedDOMComponentWithTag(
pdComponent, 'input'
);
var node = ReactDOM.findDOMNode(input);
node.value = "New Name"; // As per FB tests
TestUtils.Simulate.change(node, {target: {value: "New Name"}});
TestUtils.Simulate.keyDown(node, {key: "Enter", keyCode: 13, which: 13});
expect(node.value).toBe("New Name"); // Passes
// Fails
expect(pdComponent.props.saveData).toBeCalledWith("New Name");
// Also Fails
expect(saveData).toBeCalledWith("New Name");
});
私はここで何が欠けていますか?
あなたは 'TestUtils.Simulate.input(...)'をやってみることができますか?また、提供したいイベントデータが正しくない可能性があります。私は現在、いくつかの冗談の使用事例も研究していますが、利用できる疎な文書しかありません。 – FlorianTopf
私は入力を試みましたが、何も達成されていないようですが、テストはまだ失敗します。私はいずれかのドキュメントを見つけることができません – ExoticChimp