How can I use Jest to spy on a method call?

前端 未结 4 1565
醉梦人生
醉梦人生 2020-12-01 01:08

I recently wanted to test that some custom method gets conditionally called in the componentDidMount method of a React component.

componentDidMo         


        
4条回答
  •  醉酒成梦
    2020-12-01 01:52

    I know its a bit late, but I came across this and would suggest that to test componentDidMount initiates the call to your nested method that your test should look something like:

    Module

    componentDidMount() {
      if (this.props.initOpen) {
        this.methodName();
      }
    }
    

    Test - Good

    it('should call methodName during componentDidMount', () => {
        const methodNameFake = jest.spyOn(MyComponent.prototype, 'methodName');
        const wrapper = mount();
        expect(methodNameFake).toHaveBeenCalledTimes(1);
    });
    

    If you call componentDidMount then the assertion that methodName was called via componentDidMount is more valid.

    Test - Bad

    it('should call methodName during componentDidMount', () => {
        const spy = jest.spyOn(Component.prototype, 'methodName');
        const wrapper = mount();
        wrapper.instance().methodName();
        expect(spy).toHaveBeenCalled();
    }
    

    By writing the test like this - you call the method and then assert that it was called. Which of course it will have given you just called it.

提交回复
热议问题