I recently wanted to test that some custom method gets conditionally called in the componentDidMount method of a React component.
componentDidMo
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.