J'essaie de tester unitaire une méthode de composant. La question ici ne précise pas comment accéder à la méthode des composants à partir d'un test unitaire.
Plus précisément, compte tenu de mon composant Vue ci-dessous, comment puis-je accéder à doSomeWork()
à partir de mon test unitaire?
Composant Vue:
<template>
<div id="ThisStuff">
<span>
Some other stuff is going on here
</span>
</div>
</template>
<script>
import foo from 'bar'
export default {
props: {
ObjectWithStuffInIt: [
{
id: 1
bar: false
},
{
id: 2
bar: false
},
]
},
data: {
foo: "foo"
},
methods: {
doSomeWork: function() {
for (var i = 0; i < ObjectWithStuffInIt.length; i++) {
if (foo === "diddly") {
ObjectWithStuffInIt[i].bar = true;
}
}
}
}
}
</script>
Mon code de test:
import {createLocalVue, shallow} from 'vue-test-utils'
import ThisVueFile.test.js from '../../thisPlace/ThatPlace/ThisVueFile.vue'
import Vuex from 'vuex'
const localVue = createLocalVue()
localVue.use(Vuex);
describe('ThisVueFile.test.js', () => {
let user;
let store;
beforeEach(() => {
let getters = {
user: () => user
}
store = new Vuex.Store({ getters })
})
// I need to fill propsData: with some local data here
// because it is server data
// I need to have access to the method
// I need to use local data for `foo` in the test.
it(' When foo is set to -diddly- then set bar to true ', () => {
foo = "diddly";
// run the method in the component here
doSomeWork();
expect(OjbectWithStuffInIt[0].bar.equals(true));
})
})
propsData
Lorsque vous créez l'encapsuleur de composants avec shallowMount
(ou mount
), vous pouvez passer options
avec initial - propsData
:
import MyComponent from "@/components/MyComponent";
//...
it('...', () => {
const wrapper = shallowMount(MyComponent, {
localVue,
propsData: {
myItems: [
{ id: 200, bar: false },
{ id: 300, bar: false }
]
}
});
})
Le wrapper permet d'accéder à l'instance du composant via sa propriété vm
, vous pouvez donc appeler la méthode directement avec:
wrapper.vm.doSomeWork()
De même, vous pouvez accéder directement aux propriétés de données du composant:
wrapper.vm.foo = 'something'
Dans l'ensemble, votre test pourrait ressembler à ceci:
import { createLocalVue, shallowMount } from '@vue/test-utils'
import MyComponent from '@/components/MyComponent'
describe('MyComponent', () => {
it('When foo is set to -something-, set bar to true', () => {
const myItems = [
{ id: 200, bar: false },
{ id: 300, bar: false }
]
const localVue = createLocalVue()
const wrapper = shallowMount(MyComponent, {
localVue,
propsData: {
myItems
}
})
wrapper.vm.foo = 'something'
wrapper.vm.doSomeWork()
expect(myItems[0].bar).toBe(true)
})
})