vue-test-utilsで単体テストを書く際に、Vuetifyのコンポーネントが存在するかfindしたい場合に、コンポーネントクラスが指定できなかったのでメモ。
前提
ライブラリのバージョンは以下で確認しました。
- vue: 2.5.17
- vuetify: 1.3.11
- @vue/test-utils: 1.0.0-beta.26
実装
以下のようなコンポーネントが実装されているとして、vue-test-utilsを利用してテストを書きます。
hoge.vue
<template>
<v-select v-model="selectItem" :items="items"></v-select>
</template>
<script lang="ts">
import {
Component,
Emit,
Prop,
Vue,
} from 'vue-property-decorator';
@Component({
components: {},
})
export default class Hoge extends Vue {
@Prop() public items!: string[];
@Prop() public value!: string;
@Emit()
public input(auther: string) { /* */ }
private get selectItem(): string {
return this.value;
}
private set selectItem(value: string) {
this.input(value);
}
}
</script>
import { expect } from 'chai';
import { shallowMount } from '@vue/test-utils';
import Hoge from '@/hoge.vue';
import { VSelect } from 'vuetify/lib';
describe('Hoge.vue', () => {
it('ダイアログが表示されるか', () => {
const items = ['hoge1', 'hoge2'];
const wrapper = shallowMount(Hoge, {
propsData: {
items: items,
value: '',
},
});
# NG(パラメータに指定できない)
expect(wrapper.findAll(VSelect)).to.length(1);
# OK
expect(wrapper.findAll('v-select-stub')).to.length(1);
expect(wrapper.attributes().items).to.equal('hoge1,hoge2');
});
});
element-uiだとコンポーネントクラスをパラメータに割当できるのですが、Vuetifyの場合、指定できなかったので、やむを得ず`xxx-stub' と指定して確認するようにしました。