TL; DR
Модульный тест для компонента, скопированного с Vuetify
ссылка , проходит, но мой фактический модульный тест для моего компонента, записанного в pug
, не передается.
Подробности:
Я работаю над проектом, который построен с использованием Vue
, NUXT
, Vuetify
и pug
в качестве шаблона язык. Я настраиваю проект для написания тестовых случаев с помощью JEST
test runner. Модульный тест в настоящее время не проходит, и мне потребуются некоторые шаги для выявления проблемы.
Я прочитал следующее:
Используются следующие версии:
nuxt: ^2.0.0
nuxtjs/vuetify: ^1.10.2
pug: ^2.0.4
pug-plain-loader: ^1.0.0
jest: ^24.1.0
vue-jest: ^4.0.0-0
Ниже приводится соответствующая папка структура
<project root>/jest.config.js
<project root>/components/common/CustomCard.vue
<project root>/components/common/MessageDialog.vue
<project root>/tests/unit/components/common/TestMessageDialog.spec.js
<project root>/tests/unit/components/common/TestCustomCard.spec.js
Ниже приведены, казалось бы, важные части конфигураций:
jest.config. js
module.exports = {
verbose: true,
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/$1',
'^~/(.*)$': '<rootDir>/$1',
'^vue$': 'vue/dist/vue.common.js'
},
moduleFileExtensions: ['js', 'vue', 'json'],
transform: {
'^.+\\.js$': 'babel-jest',
'.*\\.(vue)$': 'vue-jest'
},
'collectCoverage': false,
'collectCoverageFrom': [
'<rootDir>/components/**/*.vue',
'<rootDir>/pages/**/*.vue'
],
globals: {
'vue-jest': {
pug: {
doctype: 'html'
}
}
},
preset: '@vue/cli-plugin-unit-jest/presets/no-babel'
}
TestMessageDialog .spe c. js
import {
mount,
createLocalVue
} from '@vue/test-utils'
import Vuetify from 'vuetify'
import MessageDialog from '@/components/common/MessageDialog.vue'
describe('MessageDialog.vue', () => {
const sampleData = {
titleText: 'title text with unique id : 2020.03.12.00'
}
let wrappedMessageDialog
beforeEach(() => {
const vuetify = new Vuetify()
const localVue = createLocalVue()
wrappedMessageDialog = mount(
MessageDialog,
{
localVue,
vuetify,
propsData: sampleData
}
)
})
it('renders correctly when passed props', () => {
expect(
wrappedMessageDialog
.find({ name: 'v-card-title' })
.text()
).toMatch(sampleData.titleText)
})
})
MessageDialog. vue
<template lang="pug">
v-dialog(v-model="isVisible" width="600")
v-card
v-card-title {{ titleText }}
</template>
<script>
export default {
props: {
titleText: {
default: '',
type: String
}
}
}
</script>
Я получаю следующую ошибку
FAIL tests/unit/components/common/TestMessageDialog.spec.js
[vue-test-utils]: find did not return Component, cannot call text() on empty Wrapper
31 | wrappedMessageDialog
32 | .find({ name: 'v-card-title' })
> 33 | .text()
| ^
34 | ).toMatch(sampleData.titleText)
35 | })
36 | })
at throwError (node_modules/@vue/test-utils/dist/vue-test-utils.js:1709:9)
at ErrorWrapper.text (node_modules/@vue/test-utils/dist/vue-test-utils.js:8767:3)
at Object.it (tests/unit/components/common/TestMessageDialog.spec.js:33:10)
console.error node_modules/vue/dist/vue.common.dev.js:630
[Vue warn]: Unknown custom element: <v-dialog> - did you register the component correctly? For recursive components, make sure to provide the "name" option.
found in
---> <Anonymous>
<Root>
Аналогичные предупреждения для <v-dialog>
, <v-card>
& <v-card-title>