您如何通过jest和react测试库模拟在react组件中使用的内部函数?

时间:2020-07-07 19:37:43

标签: reactjs unit-testing jestjs react-testing-library

我正在将反应测试引入团队代码库中,但是我似乎无法像在代码库其他地方的常规util / helper函数中那样模拟函数。

我的组件看起来像:

import {
  util1,
  util2,
} from '../utils/utils_for_this_component';

const ParentComponent = ({ prop1, prop2 }) => {
  const result = util1(prop1, prop2);
  return (
    <ChildComponent1
      aProp={util2(result)}
    >
    ...
    </ChildComponent1>
  );
};

所以我只想验证我在渲染此道具时,传递给util2的result是我们期望的样子。

import * as Utils from '../utils/utils_for_this_component';
...
it('should do the thing', () => {
    const spy = jest.spyOn(Utils, 'util2');
    render(<Provider store={store}>{<ParentComponent {...props} />}</Provider>);
    expect(spy).toHaveBeenCalledTimes(1);
  });

但是我从来没有通过,它说我的间谍从未被召唤过。 我在这里想念什么吗?为什么我无法监视正在使用的实际util2?

最终,我想验证传递给util2的参数是否正确,但是现在Id只是想验证其是否被正确监视。我知道该函数被调用是因为1.它可以在prod中工作,并且2.如果我记录结果,则在运行测试用例时就会显示出来。

错误:

 expect(jest.fn()).toHaveBeenCalledTimes(1)
    
    Expected mock function to have been called one time, but it was called zero times.

      55 |     const spy = jest.spyOn(Utils, 'util2');
      56 |     render(<Provider store={store}>{<ParentComponent ... />}</Provider>);
    > 57 |     expect(spy).toHaveBeenCalledTimes(1);
      58 |   });
      59 | });
      60 | 

0 个答案:

没有答案