ไม่สามารถรับความครอบคลุมการทดสอบของวิธีการภายในcomponentDidUpdate

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


person Austin Callaghan    schedule 21.05.2020    source แหล่งที่มา


คำตอบ (1)


ฉันคิดว่าเมื่อคุณทำ const newProps = PROPS; คุณไม่ได้คัดลอกวัตถุ แต่ใช้การอ้างอิงเดียวกัน คุณเปลี่ยนบางสิ่งภายใน แต่การตรวจสอบความเท่าเทียมกันนั้นตื้นเขิน ดังนั้นส่วนประกอบจึงไม่ได้รับการอัพเดตเพราะมันเห็นวัตถุอุปกรณ์ประกอบฉากเหมือนเดิม

ลอง const newProps = {...PROPS}; เพื่อตรวจสอบว่านั่นคือปัญหาหรือไม่

person JulienD    schedule 21.05.2020