Vue3脚手架实现(八、渲染vitest配置)

Vue3脚手架实现(一、整体介绍)

Vue3脚手架实现(二、项目环境搭建)

Vue3脚手架实现(三、命令行读取配置)

Vue3脚手架实现(四、模板渲染流程、渲染一个基础项目)

Vue3脚手架实现(五、渲染jsx和prettier配置)

Vue3脚手架实现(六、渲染router和pinia)

Vue3脚手架实现(七、渲染eslint配置)

Vue3脚手架实现(八、渲染vitest配置)

我们还是先整体考虑vitest增加配置分成哪几个部分

  • vscode的插件提示配置
  • package.json的命令以及相关包配置
    • scripts脚本
    • devDependencies
      • "@vue/test-utils": "^2.4.6":相关文档说明,我们需要测试vue组件,就需要这个包
      • "jsdom": "^26.1.0"jsdom 通过提供 Browser API 模拟浏览器环境,使用 jsdom 包。vitest上也有相关说明。默认是 node 环境,模拟浏览器环境就引入对应包。
      • "vitest": "^3.2.4"
  • vitest.config.js
  • eslint相关配置
  • vitest样例代码给出

我们按照步骤一个一个来进行配置说明

  • vscode配置

    • template\config\vitest\.vscode\extensions.json

      json 复制代码
      {
        "recommendations": ["vitest.explorer"]
      }
  • package.json配置:需要有个执行vitest的script命令,以及三个包的依赖

    • template\config\vitest\package.json

      perl 复制代码
      {
        "scripts": {
          "test:unit": "vitest"
        },
        "devDependencies": {
          "@vue/test-utils": "^2.4.6",
          "jsdom": "^26.1.0",
          "vitest": "^3.2.4"
        }
      }
  • vitest.config.js配置:template\config\vitest\vitest.config.js:Vitest 的主要优势之一是它与 Vite 的统一配置,见官方说明

    • 这里的exclude,vitest/config中有帮我们导出许多默认配置我们可以直接使用,可以减少我们配置排除文件的心智
    • root是我们的项目的根目录,见说明
    javascript 复制代码
    import { fileURLToPath } from 'node:url'
    import { mergeConfig, defineConfig, configDefaults } from 'vitest/config'
    import viteConfig from './vite.config'
    
    export default mergeConfig(
      viteConfig,
      defineConfig({
        test: {
          environment: 'jsdom',
          exclude: [
            ...configDefaults.exclude,
            // 'e2e/**', // 项目暂时没有引入e2e配置所以这里先暂时注释
          ],
          root: fileURLToPath(new URL('./', import.meta.url)),
        },
      }),
    )
  • eslint配置:需要使用vitest的eslint插件,如下配置一下推荐配置已经作用的文件就好

    • template\eslint\vitest\package.json

      perl 复制代码
      {
        "devDependencies": {
          "@vitest/eslint-plugin": "^1.2.7"
        }
      }
    • template\eslint\vitest\eslint.config.js.data.mjs

      javascript 复制代码
      export default function getData({ oldData }) {
        const pluginVitestImporter = {
          id: 'pluginVitest',
          importer: "import pluginVitest from '@vitest/eslint-plugin'",
        }
        const pluginVitestConfig = {
          id: 'pluginVitest',
          config: "{ ...pluginVitest.configs.recommended, files: ['src/**/__tests__/*'], },",
        }
        oldData.importerList.push(pluginVitestImporter)
        oldData.configList.push(pluginVitestConfig)
        return oldData
      }
  • 样例代码。可以放在code目录下,但是因为给出来一个就好,不会有其他增加,所以我们干脆集中放在template\config\vitest下面。相关代码语法请见官方文档,我们这里就是判定HelloWorld组件中是否有hello world字符

    • template\config\vitest\src\components\__tests__\HelloWorld.spec.js

      javascript 复制代码
      import { describe, it, expect } from 'vitest'
      
      import { mount } from '@vue/test-utils'
      import HelloWorld from '../HelloWorld.vue'
      
      describe('HelloWorld', () => {
        it('renders properly', () => {
          const wrapper = mount(HelloWorld)
          expect(wrapper.text()).toContain('hello world')
        })
      })

对应的index.ts我们需要做出相应渲染逻辑的改动,需要注意解决prettier和eslint冲突的插件需要放在最后

scss 复制代码
const create = async (name: string, options: Options) => {
  ...

  // 添加对应的配置
  ...
  if (needsVitest) {
    render('config/vitest')
  }
  if (needsEslint) {
    render('config/eslint')
    render('eslint/base') // eslint基础配置
    if (needsTypeScript) {
      render('eslint/typescript')
    }
    if (needsVitest) {
      render('eslint/vitest')
    }
    // 需要注意解决prettier和eslint冲突的插件需要放在最后
    if (needsPrettier) {
      render('eslint/prettier')
    }
  }
  ...
}
相关推荐
IT_陈寒13 分钟前
Redis缓存击穿把我整不会了,原来还有这手操作
前端·人工智能·后端
idcu35 分钟前
深入 Lyt.js 组件系统:L2 渲染引擎层的核心
前端·typescript
这是程序猿1 小时前
Spring Boot自动配置详解
java·大数据·前端
文心快码BaiduComate1 小时前
干货|Comate Harness Engineering工程实践指南
前端·后端·程序员
还有多久拿退休金1 小时前
一张栈的图,治好你面试答不出 script 阻塞的病
前端·javascript
光辉GuangHui1 小时前
Agent Skill 也需要测试:如何搭建 Skill 评估框架
前端·后端·llm
To_OC1 小时前
我终于搞懂 Claude Code 核心逻辑!90%的人都用错了模式
前端·ai编程
蓝宝石的傻话1 小时前
Headless浏览器的隐形陷阱:为什么你的AI自动化工具抓不到页面早期错误?
前端
irving同学462381 小时前
Node 后端实战:JWT 认证与生产级错误处理
前端·后端
莽夫搞战术1 小时前
【Google Stitch】AI原生画布重新定义设计,让想法变成可交互界面
前端·人工智能·ui