鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

vuetify.jsを使ったアプリの単体テスト

v-textfield

idをつけた要素がそのまま、input要素にマッピングされるためにテストは素直にかける

<v-text-field id="name" v-model="name" required></v-text-field>
  <div class="input-group input-group--dirty input-group--required input-group--text-field primary--text">
    <div class="input-group__input">
      <input id="name" required="required" tabindex="0" type="text">
    </div>
    <div class="input-group__details">
      <!---->
    </div>
  </div>

v-checkbox

idをつけた要素が見当たらないし、input要素にマッピングされないため要素の特定が難しい

<v-checkbox id="flag" v-model="flag"></v-checkbox>
  <div tabindex="0" role="checkbox" aria-checked="false" class="input-group checkbox input-group--selection-controls accent--text">
    <div class="input-group__input">
      <i aria-hidden="true" class="icon icon--selection-control material-icons">check_box_outline_blank</i>
      <div class="input-group--selection-controls__ripple"></div>
    </div>
    <div class="input-group__details"><!----></div>
  </div>

テストコード

とりあえずこんな按配でコードを書いた。(avoriaz+jest)

import { mount } from 'avoriaz'
import Vue from 'vue'
import Vuetify from 'vuetify'
import Hello from '@/components/Hello'

Vue.use(Vuetify)

describe('Hello.vue', () => {
  it('should input name', () => {
      const wrapper = mount(Hello)
      const name = wrapper.find('input#name')[0]
      name.trigger('focus')
      name.element.value = 'TARO'    
      expect(wrapper.vm.name)
      .toEqual('TARO')
    })
    it('should input flag', () => {
      const wrapper = mount(Hello)
      console.log(wrapper.html())
      const flag = wrapper.find('.input-group--selection-controls__ripple')[0]
      flag.trigger('click')
      expect(wrapper.vm.flag)
        .toEqual(true)
    })
})