Jestを使用してVue.jsのテストを行なっています。
解決したいこと: dataに設定してあるstatusの値によって表示するボタンが変更されることを確認したいです。
期待する形
true -> liked
false -> like
現状: statusの値は変更できるが、ボタンは変更されない。求める挙動と逆になってしまっています。
今の形
true -> like
false -> liked
● LikeTest › statusがtrueだったらLikedボタンが見えること expect(received).toBe(expected) // Object.is equality Expected: "Liked" Received: "Like" 。。。省略 ● LikeTest › statusがfalseだったらLikeボタンが見えること expect(received).toBe(expected) // Object.is equality Expected: "Like" Received: "Liked"
test
1import LikeTest from "../../resources/js/components/like.vue"; 2import { mount } from '@vue/test-utils'; 3 4describe('LikeTest', () => { 5 const wrapper = mount(LikeTest, {propsData: {item_id: 1},}); 6 it('statusがtrueだったらLikedボタンが見えること', () => { 7 wrapper.setData({ status: true }) 8 expect(wrapper.vm.status).toBe(true) 9 expect(wrapper.text()).toBe('Liked') 10 }) 11 12 it('statusがfalseだったらLikeボタンが見えること', () => { 13 wrapper.setData({ status: false }) 14 expect(wrapper.vm.status).toBe(false) 15 expect(wrapper.text()).toBe('Like') 16 }) 17})
component
1<template> 2 <div> 3 <button v-if="status == false" type="button" @click.prevent="like" class="btn btn-outline-warning">Like</button> 4 <button v-else type="button" @click.prevent="like" class="btn btn-warning">Liked</button> 5 </div> 6</template> 7 8<script> 9const axios = require('axios'); 10export default { 11 props: ['item_id'], 12 data() { 13 return { 14 status: false, 15 } 16 }, 17 created() { 18 this.like_check() 19 }, 20 methods: { 21 like_check() { 22 const id = this.item_id 23 const array = ["/items/",id,"/check"]; 24 const path = array.join('') 25 axios.get(path).then(res => { 26 if(res.data == 1) { 27 this.status = true 28 } else { 29 this.status = false 30 } 31 }).catch(function(err) { 32 console.log(err) 33 }) 34 } 35 } 36} 37</script>
試したこと
記載の変更
expect(wrapper.text()).toBe('Liked') ⬇︎下記の変更 expect(wrapper.find('.btn-warning').exists()).toBe(true) expect(wrapper.html()).toContain('<div><button type=\"button\" data-testid=\"like\" class=\"btn btn-outline-warning\">Liked</button></div>')
気になるところ
like_checkメソッドの中でaxiosを使っているのですが、その部分に対する記述も必要なのでしょうか?
console.logで確認したところaxios自体はpending状態で未完了となっていました。ですが、setDataで値を設定しているのでaxiosを通す必要はない?というのが私の考えになります。
どなたかお分かりになる方いましたら、ご教授ください。
よろしくお願い致します。
jest 26.6.3
vue 2.5.17
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。