반응형
vuex 및 유닛 테스트 문제를 해결하려면 어떻게 해야 합니까?
처음 mocha로 유닛테스트를 작성 및 실행하려고 하는데 문제가 발생하였습니다.컴포넌트가 있습니다.Table.vue
비에티로
<v-container>
<h1>Table</h1>
<v-layout
text-center
wrap
>
<v-simple-table v-if="table.length">
<template v-slot:default>
<thead>
<tr>
<th class="text-left">Id</th>
<th class="text-left">Name</th>
<th class="text-left">Description</th>
<th class="text-left">Action</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in table" :key="index">
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
<td>{{ item.description }}</td>
<td>
<v-btn
color="blue"
:to="{name: 'create', params: { item: item, id: item.id }}"
>
Update
</v-btn>
<v-btn
color="red"
@click="show(item)"
>
Delete
</v-btn>
</td>
</tr>
</tbody>
</template>
</v-simple-table>
</v-layout>
<v-btn
:to="{name: 'create'}"
color="primary"
>
<span class="mr-2">Create</span>
</v-btn>
<modal name="hello-world">
<v-container>
<v-layout
text-center
wrap
>
Are you sure you eant to remove this item?
</v-layout>
<v-layout
text-center
wrap
>
<v-btn
color="red"
@click="deleteItem"
>
Yes
</v-btn>
<v-btn
color="primary"
@click="hide"
>
No
</v-btn>
</v-layout>
</v-container>
</modal>
</v-container>
</template>
<script>
import { mapState, mapActions } from 'vuex'
export default {
name: "Table",
data() {
return {
itemToRemove: null
}
},
methods: {
...mapActions([
'removeItem'
]),
show (item) {
this.$modal.show('hello-world');
this.itemToRemove = item
},
hide () {
this.$modal.hide('hello-world');
this.itemToRemove = null
},
deleteItem () {
this.removeItem(this.itemToRemove)
this.hide()
}
},
computed:
mapState({
table: state => state.table.table
})
}
</script>
<style scoped>
</style>
그리고 거기서 테스트를 하고 싶어요.파일이 있습니다.table.spec.js
안에서.tests/unit
폴더
import { expect } from 'chai'
import { shallowMount, createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import Table from '@/components/Table.vue'
const localVue = createLocalVue()
localVue.use(Vuex)
const store = new Vuex.Store({
state: {}
})
describe('Table.vue', () => {
it('renders h1 tag', () => {
const wrapper = shallowMount(Table, {localVue, store})
expect(wrapper.find('h1').text().equal('Table'))
})
})
명령어를 실행할 때npm run test:unit
오류가 있습니다.1) Table.vue renders h1 tag: TypeError: Cannot read property 'table' of undefined
이전에는 텍스트 오류였다.Cannot read property 'state' of undefined
테스트에 vuex를 포함하려고 했는데 유닛 테스트가 처음이라 뭔가 잘못된 것 같습니다.
시험에 합격해야 하고, 클릭 버튼과 콜액션과 같은 이벤트에 대한 새로운 테스트를 작성할 수 있도록 누군가가 도와줄 수 있을 것입니다.잘 부탁드립니다
https://vue-test-utils.vuejs.org/guides/using-with-vuex.html에서 읽어보십시오.
그들은 Vuex를 조롱하는 훌륭한 예를 가지고 있습니다.그것은 당신이 해야 할 일입니다.다음과 같습니다.
import { shallowMount, createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import Actions from '../../../src/components/Actions'
const localVue = createLocalVue()
localVue.use(Vuex)
describe('Actions.vue', () => {
let actions
let store
beforeEach(() => {
actions = {
actionClick: jest.fn(),
actionInput: jest.fn()
}
store = new Vuex.Store({
actions
})
})
it('dispatches "actionInput" when input event value is "input"', () => {
const wrapper = shallowMount(Actions, { store, localVue })
const input = wrapper.find('input')
input.element.value = 'input'
input.trigger('input')
expect(actions.actionInput).toHaveBeenCalled()
})
언급URL : https://stackoverflow.com/questions/58475075/how-can-i-solve-problem-with-vuex-and-unit-testing
반응형
'programing' 카테고리의 다른 글
gdb: "기호 테이블이 로드되지 않았습니다" (0) | 2022.09.01 |
---|---|
C는 왜 ->와 을 구별합니까? (0) | 2022.09.01 |
vue.js를 사용하여 선택 옵션에서 동적 툴팁을 설정할 수 있습니까? (0) | 2022.09.01 |
Vue.js/Vuex: 상태 값으로 v-bind하는 방법 (0) | 2022.09.01 |
Vue에서 v-for 값을 HTML 특성에 바인딩하는 방법 (0) | 2022.09.01 |