How to verify method is not invoked on mock passed as prop

403 Views Asked by At

I am developing a React application with jest and TypeMoq.

I can't test the negative path of a decision tree when the mocked call is a method on the object which needs to be undefined. Is there a method on TypeMoq that can help me verify that the provided method is not called?

    type TopicComponentProps = { 
        topic: Topic
        history?: History<any>
    }

    export const TopicComponent = ({topic, history} : TopicComponentProps) => {
        const { Id, Name } = topic;

        const filterTopic = () => {
            if (history) { // <-- this is my problem
               history.push(`/topic/overview/${Id}`);
            }
        }

        return(
            <Fragment>
                <span 
                    style={topicStyle}
                    onClick={() => filterTopic()}
                    className="topic">
                    {Name}
                </span>
            </Fragment>
        )
    }

The positive test case looks like this:

    it('should trigger the navigation when clicked', () => {
        const mockHistory = Mock.ofType<History<any>>();

        const wrapper = mount(
            <TopicComponent topic={testTopic} history={mockHistory.object} />
        );
        wrapper.simulate('click');

        mockHistory.verify(x => x.push(It.isAnyString()), Times.once());
    });

How do I setup the mock object, so i can test that no navigation happens when no history is provided?

    it('should not trigger the navigation when history is undefined', () => {
        let mockHistory = Mock.ofType<History<any>>();

        ???

        const wrapper = mount(
            <TopicComponent topic={testTopic} history={???} />
        );
        wrapper.simulate('click');

        mockHistory.verify(x => x.push(It.isAnyString()), Times.never());
    });
0

There are 0 best solutions below