Реактивный тест с Jest и Enzyme без вызова функции prop - PullRequest
0 голосов
/ 11 октября 2019

У меня есть следующий тестовый пример

//to mock props
const createTestProps = (props) => ({
    ...props,
    processDecision: jest.fn(),
    navigation: {
        getParam: jest.fn(),
        navigate: jest.fn(),
    },
});

describe('TermsAndConditionsScreen', () => {
    let props, wrapper;
    beforeEach(() => {
        props = createTestProps({});
        wrapper = shallow(<TermsAndConditionsScreen {...props} />);
    });


    it('should invoke the processDecision twice', () => {

        wrapper = shallow(<TermsAndConditionsScreen {...props} />);
        wrapper.dive().find(Button).first().props().onPress();
        wrapper.dive().find(Button).last().props().onPress();
        expect(props.processDecision).toHaveBeenCalledTimes(2);

    });
});

По какой-то причине он не обнаруживает props.processDecision. но если я скажу это так, то все работает отлично:

 it('should invoke the processDecision twice', () => {
            let mockFn = jest.fn();
            TermsAndConditionsScreen.prototype.processDecision = mockFn;        
            wrapper = shallow(<TermsAndConditionsScreen {...props} />);
            wrapper.dive().find(Button).first().props().onPress();
            wrapper.dive().find(Button).last().props().onPress();
            expect(mockFn).toHaveBeenCalledTimes(2);

        });

В чем разница, пожалуйста? Заранее спасибо

1 Ответ

0 голосов
/ 14 октября 2019

На всякий случай, если кто-то сталкивается с такой же трудностью. В первом примере он считает processDecision опорой (что не соответствует действительности). Во втором примере он рассматривает processDecision как прототип (и это правда), и поэтому он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...