コンポーネントに以下のコードがあります。私はフォーム上でそれをテストしたい、それはthis.props.onUploadメソッドをリーダーで呼び出す。 どうすればテストできますか? 私の期待テストは機能していません、this.props.onUploadがreader.onload関数の中にあるので、私はそれを推測していますか?FileReader onload関数で呼び出された関数をテストする方法に反応します
UploadForm.js小道具と偽のイベントを作成するようで渡されるモックアップロードと
handleSubmit(e) {
e.preventDefault();
var inputData = '';
var file = this.state.file;
if (file) {
var reader = new FileReader();
reader.onload = (function(file) {
return function(e) {
inputData = e.target.result;
this.props.onUpload(inputData);
};
})(file).bind(this);
reader.readAsText(file);
}
}
render() {
return(
<form onSubmit={this.handleSubmit}>
<label> Enter File: <br/>
<input type="file" id="fileinput" onChange={this.handleChange}/>
</label>
<input type="submit" value="Submit" className="btn-upload" />
</form>
);
}
UploadForm.test.js
const mockOnUpload = jest.fn();
const file = new File([""], "filename");
const form = shallow(<UploadForm onUpload={mockOnUpload}/>);
const event = {
preventDefault: jest.fn(),
target: {files : [file]}
};
describe('when clicking `upload-file` button',() => {
beforeEach(() => {
form.find('#fileinput').simulate('change', event);
form.find('form').simulate('submit', event);
});
it('calls the handleSubmit CallBack',() => {
expect(mockOnUpload).toHaveBeenCalledWith(input);
});
});
ありがとうございます!私はそれに得ることができたらそれを試してみる – MerC