开玩笑预期的模拟函数已被调用,但未称为错误

时间:2020-02-26 16:33:56

标签: mocking jestjs ts-jest react-tsx

我正在尝试使用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 !.

        .
        .
        }
}

0 个答案:

没有答案