javascript - Metoden er ikke tilgjengelig i enhetstesten
Jeg laget et nytt prosjekt i VueJS med TypeScript.
Min komponent med metoder å teste:
<template>
<div></div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
@Component
export default class Slider extends Vue {
private slide: number = 0;
private sliding: boolean = false;
public setSlide(slide: number): void {
this.slide = slide;
}
public setSliding(sliding: boolean): void {
this.sliding = sliding;
}
private onSliderStart(slide: any): void {
this.setSliding(true);
}
private onSlideEnd(slide: any): void {
this.setSliding(false);
}
}
</script>
Test :
import { shallowMount } from '@vue/test-utils';
import Slider from '@/components/Header.vue';
describe('Slider', () => {
const wrapper = shallowMount(Slider);
it('check Slider is a Vue Instance', () => {
expect(wrapper.isVueInstance()).toBeTruthy();
});
it('setSlide is func', () => {
expect(typeof wrapper.vm.setSlide).toBe('function')
})
});
og nå vil jeg gjerne teste, men metodene setSlide, setSliding er ikke tilgjengelige i wrapperen :(
Svar #1
Prøv dette:
import YourComponentHere from "@/components/YourComponentHere";
import { shallowMount, Wrapper } from "@vue/test-utils";
describe("test", () => {
const wrapper: Wrapper<YourComponentHere & { [key: string]: any }>;
it("does something", () => {
expect(wrapper.vm.someThingWhatever).toBe(true);
});
});
Fordelen her er at du ikke trenger å kaste wrapper.vm til any hver gang du bruker wrapper.vm
Svar #2
Det ser ut til at du må kaste wrapper.vm som any for at TypeScript ikke skal klage:
it('setSlide is func', () => {
expect(typeof (wrapper.vm as any).setSlide).toBe('function')
})
Eller på toppen av testene dine:
const wrapper: any = shallowMount(Slider);
Kilde: https://github.com/vuejs/vue-test-utils/issues/255#issuecomment-433312728.
