Я пытаюсь протестировать приложение Nuxtjs SSR, использующее Apollo и Vuex с Jest и @ vue / test-utils
если компонент импортирует запросы qraphql, он не будет работать и вернет ошибку unexpected token
.
И если я попробовал другой компонент, который вместо импорта запросов напрямую зависел от действий vuex, но я получил ошибку об этом. $ Store не определен.
Разве конфигурация Nuxtjs не должна нормально работать с тестом и иметь все настройки магазина, маршрутизатора, Apollo или есть какие-то особые настройки, которые мне нужно сделать для тестирования?
ниже мои настройки:
внутри пакета. Json
"babel": {
"env": {
"test": {
"presets": [
[
"@nuxt/babel-preset-app",
{
"targets": {
"node": "current"
}
}
]
],
"plugins": [
"@babel/plugin-syntax-dynamic-import"
]
}
},
"presets": [
"@babel/preset-env"
],
"plugins": [
"@babel/plugin-syntax-dynamic-import"
]
},
"jest": {
"moduleNameMapper": {
"^~/(.*)$": "<rootDir>/$1",
"^.+.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub"
},
"moduleFileExtensions": [
"js",
"vue"
],
"transform": {
"^.+\\.vue$": "vue-jest",
".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub",
"^.+\\.jsx?$": "babel-jest"
}
}
тест, который я запускаю invest.test.js:
import { createLocalVue, mount, RouterLinkStub } from '@vue/test-utils'
import BootstrapVue from 'bootstrap-vue'
import CommentInvestir from '../pages/comment-investir'
describe('comment-investir.vue', () => {
let localVue
beforeEach(() => {
localVue = createLocalVue()
localVue.use(BootstrapVue, {})
})
test('is a Vue instance', () => {
const wrapper = mount(CommentInvestir, { localVue })
expect(wrapper.isVueInstance()).toBeTruthy()
})
test('If profile physique exsist disable Button', () => {
const wrapper = mount(CommentInvestir, {
stubs: {
NuxtLink: RouterLinkStub
}
})
wrapper.setData({
userProfiles: [{ id: '01', type: 'physique', status: 'submitted' }]
})
expect(wrapper.vm.userProfiles.length).toBe(1)
expect(wrapper.vm.hasProfilePhy).toBeTruthy()
expect(wrapper.text()).toBe('Compléter mon profil investisseur')
})
})
Компонент, который я тестирую:
<template>
<section class="page">
<Title title="Bienvenue chez Fundimmo !">
Comment Investir?
</Title>
<div class="flex">
<nuxt-link to="profile/add/physique" class="box-wrapper" :class="{disabled: hasProfilePhy}">
<Box t="physique" subt="En tant que personne">
Je suis un particulier
</Box>
</nuxt-link>
<nuxt-link to="profile/add/morale">
<Box t="morale" subt="En tant que personne" icon="Bldg">
J'investis en tant qu'entreprise
</Box>
</nuxt-link>
</div>
</section>
</template>
<script>
import Title from '~/components/UI/Title'
import Box from '~/components/UI/Box'
export default {
name: 'CommentInvestir',
middleware: 'authenticated',
components: { Title, Box },
data: function() {
return {
userProfiles: this.$store.state.profiles
// hasProfilePhy: false
}
},
computed: {
hasProfilePhy() {
return !!this.userProfiles.some(
p => p.type === 'physique' && p.status !== 'draft'
)
}
},
created() {
if (this.hasProfilePhy) {
this.$router.push('/profile/add/morale')
}
}
}
</script>