tidak bisa mendapatkan cakupan pengujian suatu metode di dalam komponenDidUpdate

Saya sedang menguji komponen kelas reactjs dengan enzim dan sepertinya saya tidak dapat menargetkan pemanggilan fungsi yang satu ini

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
  }
}

File Pengujian

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 "di sini" tidak pernah dipanggil. Komponen pertama kali melakukan pembaruan dipanggil prevProps dan Nilai saat ini keduanya salah dan saat berikutnya dipanggil, nilainya keduanya benar, yang berarti tidak pernah memenuhi kondisi untuk mencapai metode.

Saya sudah mencobanya juga wrapper.instance().componentDidUpdate(PROPS, initialLayout); Tidak berhasil juga.

Apakah ada sesuatu yang saya lewatkan tentang setProps? atau adakah penjelasan untuk perilaku alat peraga sebelumnya dan saat ini yang sama?


person Austin Callaghan    schedule 21.05.2020    source sumber


Jawaban (1)


Saya pikir ketika Anda melakukan const newProps = PROPS; Anda tidak menyalin objek tetapi menggunakan referensi yang sama. Anda mengubah beberapa hal di dalamnya, tetapi pemeriksaan kesetaraannya dangkal, sehingga komponen tidak diperbarui karena melihat objek props yang sama seperti sebelumnya.

Coba const newProps = {...PROPS}; untuk memeriksa apakah itu masalahnya.

person JulienD    schedule 21.05.2020