【发布时间】:2018-03-03 11:23:59
【问题描述】:
我正在尝试通过使用 Jest 创建一个函数的模拟来测试一个函数(作为道具传递给 React 组件)是否使用预期的参数被调用。
下面是我要测试的功能:
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 调用并在 Promise 中返回响应数据。 handlerFunction() 获取从 getResponse() 返回的响应数据,并将响应数据和相应的文件名推送到 response[] 中,然后调用 this.props.sendResponseData() 。我模拟了 getResponse() 并让它返回一个虚拟响应数据并测试 this.props.sendResponseData() 是否被我在测试类中创建的 dummyResponse 调用。
这是我为在 React 组件中测试上述功能而编写的代码:
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.
任何帮助将不胜感激。谢谢!
【问题讨论】: