0
Jestを使って模擬関数を作成して、期待される引数で関数が呼び出されるかどうかをテストしようとしています。Reactコンポーネントの中でthenブロックと呼ばれる関数を嘲笑
handlerFunction() {
let response = [];
this.props.files.forEach((file) => {
let responseObject= this.getResponse(file);
responseObject.then((result) => {
response.push({
fileName: file.name,
records: result,
});
this.props.sendResponseData(response);
});
});
}
getResponse(file) {
return new Promise((resolve, reject) => {
axios.post(URL, file).then((response) => {
resolve(response.data);
}).catch((error) => {
reject(console.error(error));
});
});
}
handlerFunction()を呼び出してgetResponse()のAJAX呼び出しを行うと約束して応答データを返します。以下は
は、私がテストしようとしている機能です。 handlerFunction()は、getResponse()から返されたレスポンスデータを取得し、レスポンスデータと対応するファイルの名前をresponse []にプッシュし、this.props.sendResponseData()を呼び出します。私はgetResponse()を嘲笑して、ダミーのレスポンスデータを返し、this.props.sendResponseData()がテストクラスで作成したdummyResponseで呼び出されているかどうかをテストしました。ここでは私が反応コンポーネントで上記の機能をテストするために書かれているコードは次のとおりです。私はこのテストを実行しようとすると
it('handlerFunction',() => {
files= [dummyFile];
sendResponseData = jest.fn();
let wrapper = shallow(<RenderComponent
files={files}
sendResponseData={sendResponseData}
/>);
let dummyAJAXResponse = {};
let dummyResponse = [{ fileName: 'file', records: dummyAJAXResponse }];
const getResponseMock= jest.fn(() => {
return new Promise((resolve) => {
resolve(dummyAJAXResponse);
});
});
wrapper.instance().getResponse= getResponseMock ;
wrapper.update();
wrapper.instance().handlerFunction();
expect(sendResponseData).toBeCalledWith(dummyResponse);
})
、それは次のように失敗し、こう述べています。
expect(jest.fn()).toBeCalledWith(expected)
Expected mock function to have been called with:
[[{"fileName": "file", "records": {}}]]
But it was not called.
ご協力いただければ幸いです。ありがとう!