简体   繁体   中英

React-Native Jest test function is called in componentDidMount

I'm trying to test if a function is called in the componentDidMount hook of my component.

I use React-Native and Jest to test my component.

The component looks like this:

const tracker = new GoogleAnalyticsTracker('UA-79731-33');
class MyComponent extends Component {
    componentDidMount() {
        tracker.trackScreenView(this.props.title);
    }
}

So I'm mocking the GoogleAnalyticsTracker , it looks okay. Although I'm not sure how I can test that it has been called in the componentDidMount hook.

This is my test, which doesn't work:

import 'react-native';
import React from 'react';
import renderer from 'react-test-renderer';
import { GoogleAnalyticsTracker } from 'react-native-google-analytics-bridge';

import MyComponent from '../';

jest.mock('react-native-google-analytics-bridge');
const tracker = new GoogleAnalyticsTracker('ABC-123');

describe('MyComponent', () => {
    it('renders', () => {
        const tree = renderer.create(
            <MyComponent />,
        ).toJSON();
        expect(tree).toMatchSnapshot();
        expect(tracker.trackScreenView).toBeCalled();
    });
});

The toBeCalled() returns false.

How can I test that my function has been called in the componentDidMount ?

Thanks

The react test rendered only calls the render method of a component and returns the output, it does not really start the component and so all the life cycle methods are not called. You should switch to the enzyme renderer which supports the full start of components using enzyme.mount

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM