在Jest中的两个不同测试块中模拟相同的功能

时间:2017-07-28 18:10:51

标签: javascript unit-testing reactjs jestjs

我有一个关于在Jest中创建函数模拟的问题。我的页面上有两个元素,它们在我的React组件中调用不同的函数。这两个函数都调用相同的函数,该函数从props onFieldChanged传入。我想模拟这两个元素的变化,并确认调用了props.onFieldChanged

当我写第一个测试(下面的第一个测试)时,它会以漂亮的颜色传递。当我编写第二个测试时,第二个测试通过,但第一个测试现在失败了。基本上,我无法让两个测试同时通过。我需要以某种方式重置模拟吗?有谁知道怎么做?

是什么给出了?

  describe('user selects checkbox', () => {
    props.onFieldChanged = jest.fn();
    const wrapper = shallow(<DateOptions {...props} />);
    it('calls the onFieldChanged function', () => {
      const element = wrapper.find('#addOneToStudyDays');
      element.simulate('change');
      expect(props.onFieldChanged).toHaveBeenCalled();
    });
  });

  describe('user types in input', () => {
    props.onFieldChanged = jest.fn();
    const wrapper = shallow(<DateOptions {...props} />);
    it('calls the onFieldChanged function', () => {
      const element = wrapper.find('#lowerTimeLimit');
      element.simulate('change');
      expect(props.onFieldChanged).toHaveBeenCalled();
    });
  });

1 个答案:

答案 0 :(得分:0)

尝试将jest.fn()作为不同的变量传递:

  describe('user selects checkbox', () => {
    it('calls the onFieldChanged function', () => {
      const onFieldChanged = jest.fn();
      const wrapper = shallow(<DateOptions {...props, onFieldChanged} />);
      const element = wrapper.find('#addOneToStudyDays');
      element.simulate('change');
      expect(props.onFieldChanged).toHaveBeenCalled();
    });
  });

  describe('user types in input', () => {
    it('calls the onFieldChanged function', () => {
      const onFieldChanged = jest.fn();
      const wrapper = shallow(<DateOptions {...props, onFieldChanged} />);
      const element = wrapper.find('#lowerTimeLimit');
      element.simulate('change');
      expect(props.onFieldChanged).toHaveBeenCalled();
    });
  });