我试图测试一个函数(作为道具传递给React组件)是否通过使用Jest创建它的模拟来调用期望的参数 .
以下是我要测试的功能:
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()并使它返回一个虚拟响应数据并测试是否使用我在测试类中创建的dummyResponse调用this.props.sendResponseData() .
这是我为在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.
任何帮助将不胜感激 . 谢谢!
1 回答
尝试在axios之前添加retrun . 像那样:
要么