Как проверить симуляцию на навигационной системе реагировать? - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь улучшить codecoverage, имитируя функцию react-navigation navigate.В настоящее время у меня возникает проблема с имитацией функции react-navigation navigate.

Я пытался использовать mockStore из redux-mock-store.

const store = mockStore({
    rehydrated: false,
});
const navigation = { navigate: jest.fn() };
const wrapper = shallow(<Login navigation={navigation} />);

Ниже яесть кнопка (обратите внимание, что это пользовательская кнопка).

<Button
    constainerStyle={{ flex: 1 }}
    onPress={() => this.goToSignup()}
    style={styles.btnSignup}
    textStyle={styles.txtSignUp}
>SIGNUP</Button>


goToSignup = () => {
    this.props.navigation.navigate('Signup');
}

Ниже приведен мой тестовый код.

const wrapper = shallow(<Login navigation={navigation} />);
describe('interaction', () => {
    beforeEach(() => {
        wrapper.setProps({
            navigation: {
                navigate: jest.fn(),
            },
        });
    });
    describe('clicking the button', () => {
        let goToSignupSpy;
        let onLoginSpy;
        let navigateSpy;
        beforeEach(() => {
            wrapper.instance().goToSignup = jest.fn();
            wrapper.instance().onLogin = jest.fn();
            goToSignupSpy = jest.spyOn(wrapper.instance(), 'goToSignup');
            onLoginSpy = jest.spyOn(wrapper.instance(), 'onLogin');
            navigateSpy = jest.spyOn(wrapper.instance().props.navigation, 'navigate');
        });
        it('should call onLogin callback', () => {
            const loginBtn = wrapper.find(Button).at(1);
            loginBtn.props().onPress();
            expect(onLoginSpy).toBeCalled();
        });
        it('should call goToSignup callback', () => {
            const signupBtn = wrapper.find(Button).at(0);
            signupBtn.props().onPress();
            expect(goToSignupSpy).toHaveBeenCalled();
            /// failing
            expect(navigateSpy).toBeCalledWith('Signup');
        });
    });
    afterAll(() => {
        Login.prototype.onLogin.mockRestore();
        Login.prototype.goToSignup.mockRestore();
    });
});

Все работает нормально, ожидайте spy на react-navigationнавигации.Что я делаю не так?

Ожидайте симуляции макета на функции навигации react-navigation.

...