Panduan cara untuk menguji unit komponen Vue dan kaedah mengejek menggunakan ViTest
P粉445750942
2023-08-29 00:23:20
<p>Gunakan vitest untuk mensimulasikan kaedah dan komponen vue ujian unit. </p>
<p><em>MyComponent.vue</em></p>
<pre class="brush:php;toolbar:false;"><setup script>
import { ref } daripada "vue";
const isSelectAll = ref(true);
const selectAllModel = ref(false);
const onChange = () =>
isSelectAll.value = benar;
selectAllModel.value = palsu;
};
const onVisibleChange = () =>
// buat sesuatu daripada menelefon
onChange();
};
</script></pre>
<p>Saya ingin menguji kaedah <code>onVisibleChange</code> dengan mengejek <code>onChange</code> </p>
<p><em>MyComponent.spec.js</em></p>
<pre class="brush:php;toolbar:false;">import { mount } daripada 'vitest';
import { ref } daripada 'vue';
import MyComponent daripada './MyComponent.vue';
describe('MyComponent', () => {
pembungkus const = shallowMount(MyComponent);
const spy = vi.spyOn(wrapper.vm, 'onChange');
wrapper.vm.onVisibleChange();
expect(spy).toHaveBeenCalled();
expect(wrapper.vm.onChange).toHaveBeenCalled();
// Kedua-dua jangkaan memberikan ralat: AssertionError: dijangka "onChange" akan dipanggil sekurang-kurangnya sekali
//Juga mencuba
const mock = vi.fn();
wrapper.vm.onChange = olok-olok;
wrapper.vm.onVisibleChange();
expect(mock).toHaveBeenCalled(); // AssertionError: dijangka "pengintip"
expect(wrapper.vm.onChange).toHaveBeenCalled(); // TypeError: [Function onChange] bukan pengintip atau panggilan kepada pengintip!
})</pre></p>
Kaedah ujian bukanlah idea yang baik. Kerana nama fungsi mungkin berubah.
Cara yang lebih baik adalah dengan menguji:
onChange()
anda mengandungi pemancaran peristiwa. Isu ini harus diuji.onChange()
anda menukar templat. Jadi perubahan ini juga harus diuji.spy.on
.