Vueコンポーネントのスナップショットテストは、
wrapper.html()
を toMatchSnapshot()
で比較することで
「HTML(DOM構造)が変わっていないか?」をチェックするテスト。
→ props の違いによる表示内容の変化も確認できる。
<!-- src/components/Greeting.vue -->
<template>
<div>
<p>Hello, {{ name }}!</p>
</div>
</template>
<script lang="ts">
import { Vue, Component, Prop } from 'vue-property-decorator';
@Component
export default class Greeting extends Vue {
@Prop({ default: 'World' }) readonly name!: string;
}
</script>
// tests/Greeting.spec.ts
import { shallowMount } from '@vue/test-utils';
import Greeting from '@/components/Greeting.vue';
describe('Greeting.vue snapshot', () => {
it('初期表示のスナップショットを取得する', () => {
// shallowMountでコンポーネントを作成
const wrapper = shallowMount(Greeting);
// HTMLをスナップショットとして保存
expect(wrapper.html()).toMatchSnapshot();
});
it('props.name に "Vue" を渡した時のスナップショット', () => {
const wrapper = shallowMount(Greeting, {
propsData: { name: 'Vue' },
});
expect(wrapper.html()).toMatchSnapshot();
});
});
npx jest
__snapshots__/Greeting.spec.ts.snap
が自動生成される。
// Jest Snapshot v1
exports[`Greeting.vue snapshot 初期表示のスナップショットを取得する 1`] = `
<div>
<p>Hello, World!</p>
</div>
`;
exports[`Greeting.vue snapshot props.name に "Vue" を渡した時のスナップショット 1`] = `
<div>
<p>Hello, Vue!</p>
</div>
`;