使用 Jest 测试 Nuxt + Vuex + Vuetify 的设置

Posted

技术标签:

【中文标题】使用 Jest 测试 Nuxt + Vuex + Vuetify 的设置【英文标题】:Testing setup for Nuxt + Vuex + Vuetify with Jest 【发布时间】:2020-05-05 17:35:46 【问题描述】:

我花了一天时间解决有关 Nuxt + Vuex + Vuetify with Jest 测试设置的未记录问题。

我遇到了以下问题:

Unknown custom element: <nuxt-link> - When running jest unit tests

Cannot read property 'register' of undefined

[Vuetify] Multiple instances of Vue detected

【问题讨论】:

【参考方案1】:

在收集了多个来源后,我最终完成了以下设置,我将在此处记录它以供任何人省去一天的头痛。

工作设置:

// ./jest.config.js

module.exports = 
    // ... other stuff
     setupFilesAfterEnv: ['./test/jest.setup.js']

// ./test/jest.setup.js

import Vue from 'vue'
import Vuetify from 'vuetify'
import VueTestUtils from '@vue/test-utils'

Vue.use(Vuetify)

// Mock Nuxt components
VueTestUtils.config.stubs['nuxt'] = '<div />'
VueTestUtils.config.stubs['nuxt-link'] = '<a><slot /></a>'
VueTestUtils.config.stubs['no-s-s-r'] = '<span><slot /></span>'
// ./test/Header.test.js

import  mount, createLocalVue  from '@vue/test-utils'
import Vuetify from 'vuetify'
import Vuex from 'vuex'

import Header from '~/components/layout/Header'

const localVue = createLocalVue()
localVue.use(Vuex)

let wrapper

beforeEach(() => 
    let vuetify = new Vuetify()

    wrapper = mount(Header, 
        store: new Vuex.Store(
            state:  products: [] 
        ),
        localVue,
        vuetify
    )
)

afterEach(() => 
    wrapper.destroy()
)

describe('Header', () => 
    test('is fully functional', () => 
        expect(wrapper.element).toMatchSnapshot()
    )
)

【讨论】:

请注意,使用字符串存根会引发控制台错误:[vue-test-utils]: Using a string for stubs is deprecated and will be removed in the next major version.

以上是关于使用 Jest 测试 Nuxt + Vuex + Vuetify 的设置的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jest 测试 NUXT.js 和 Vue.js 应用程序。获取“在 mapState() 中找不到 [vuex] 模块命名空间”和“[vuex] 未知操作类型”

如何使用 vue-test-utils 和 Jest 在 Nuxt 中对使用 vuex-module-decorators 语法定义的 Vuex 模块进行单元测试?

使用 Nuxt 和 Jest 进行集成测试

Jest + Nuxt + Nuxt-Fire 在测试套件中失败

使用 Jest 在 Nuxt 中测试组件时如何添加/模拟 Nuxt Auth 库

如何在 Jest 测试中使用 nuxt 运行时配置变量