ฉันกำลังทดสอบส่วนประกอบคลาส 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 หรือไม่ หรือมีคำอธิบายใด ๆ สำหรับพฤติกรรมนี้ของอุปกรณ์ประกอบฉากทั้งก่อนหน้าและปัจจุบันที่เหมือนกัน?