Я тестирую компонент класса reactjs с помощью фермента, и я не могу настроить таргетинг на этот вызов одной функции.
ClassComponentFile.jsx
componentDidUpdate(prevProps, { layout: prevLayout }) {
const { setData, interaction } = this.props;
console.log('prevProp', prevProps.interation.data.requestSuccessful)
console.log('current Value',this.props.interation.data.requestSuccessful)
if (prevProps.interaction.data.responseSuccessful
!== interaction.data.responseSuccessful) {
console.log('here');
this.proceedToNextModuleClick(); <-- This Function Call
}
}
Тестовый файл
const PROPS = {
...
interaction: {
data: {},
},
...
};
it('should call invoke proceedToNextModuleClick', () => {
const wrapper = mount(<ServicingPortalLayoutController {...PROPS} />);
const initialLayout = getInitialLayout({
proceedToNextModuleClick: jest.fn(),
});
wrapper.setState({ layout: initialLayout });
const proceedMock = jest.spyOn(wrapper.instance(), 'proceedToNextModuleClick');
const newProps = PROPS;
newProps.interaction.data = { responseSuccessful: true };
wrapper.setProps(newProps);
expect(proceedMock).toHaveBeenCalledTimes(1);
});
«Здесь» console.log никогда не вызывается. В первый раз, когда компонент выполнил обновление, вызывается prevProps и текущее значение, оба являются ложными, а затем в следующий раз, когда он вызывается, оба значения являются истинными, что означает, что он никогда не удовлетворяет условию для достижения метода.
Я тоже пробовал это wrapper.instance().componentDidUpdate(PROPS, initialLayout);
С этим тоже не повезло.
Есть ли что-то, что мне не хватает в setProps? или какое-либо объяснение такого поведения как предыдущего, так и текущего реквизита одинаково?