我正在尝试使用Jest测试流,但是对于期望被调用的函数,此测试在Expect()。toHaveBeenCalledTimes()上失败。我曾尝试查看其他帖子,但没有解决..作为Jest的新手,我希望有人可以看看这个错误并提出问题所在。
控制器模块的单元测试
describe('controller tests', () => {
beforeEach(() => {
jest.restoreAllMocks();
});
test('component ready fetches data', function() {
const controller = getTesTController(); /* Create a controller object*/
let dummyDom = document.createElement('div');
controller.createComponents(dummyDom); /* act */
expect(controller.onResponse).toHaveBeenCalledTimes(1); /* createComponents() invokes onResponse*/
});
}
创建测试数据
export function getTestController(): Controller {
let controller: Controller;
let mockRequest = function(requestParams: RequestParams) {
// mock server call to fetch data and pass to controller.
controller.onResponse(mockData); /* onResponse of controller called */
};
controller = new Controller(
mockRequest /* Controller calls this */
);
controller.createComponents = jest.fn( controller.createComponents.bind(controller));
controller.onResponse = jest.fn(controller.onResponse.bind(controller));
return controller;
}
控制器模块
public class Controller{
private mockRequest = (requestParams) => void;
Controller(mockActivityRequest){
// constructor
this.mockRequest = mockRequest;
}
public createComponents(){
// Api invoked in test - executes the callback passed,that in-turn calls onResponse
mockRequest(requestParams);
}
onResponse(ResponseData){
// This is expected to be called - jest fails on this check !.
.
.
}
}