使用 ViteJs 将 Jest 测试集成到现有的 Vue 3 项目中

简介: 使用 ViteJs 将 Jest 测试集成到现有的 Vue 3 项目中

根据我最近的经验,我面临着将 Jest 测试框架集成到使用Vite构建的现有Vue3 js项目中的挑战。我在各种博客上找到有用的安装指南时遇到了困难。然而,经过多次尝试和付出很大的努力,我最终找到了解决方案。在这篇博文中,我的目标是提供分步安装指南,以帮助其他可能遇到同样挑战的人。****

Jest 单元测试

Jest 由 Facebook 开发,是一个广泛使用的 JavaScript 测试框架。它专为测试 JavaScript 应用程序而设计,包括 React、Vue 和 Angular 等前端框架以及后端 Node.js 应用程序。Jest 的核心目标是通过其广泛的特性集和包容性的内置功能,为用户提供用户友好且全面的测试体验。您可以在此处找到有关 Jest 的更多信息。

先决条件

在继续之前,请确保您具备以下先决条件:

  • 您的计算机上安装了 Node.js(版本 14 或更高版本)和 npm(节点包管理器)。
  • 了解 Vue.js 和 Vite 构建工具的基础知识。如果需要,可以参考Vue3jsVite的文档。

第 1 步:在您的项目中初始化 Jest

首先,使用您喜欢的命令行界面导航到 Vite + Vue 3 项目的根目录。执行以下命令安装必要的 Jest 包:

使用yarn

yarn add jest jest-environment-jsdom babel-jest @babel/preset-env @vue/vue3-jest @vue/test-utils -D

使用 npm

npm install --save-dev jest jest-environment-jsdom babel-jest @babel/preset-env @vue/vue3-jest @vue/test-utils

第 2 步:配置 Jest

安装完成后,您需要通过jest.config.js在项目的根目录中创建一个名为的新文件来配置 Jest。在文件中包含以下内容:

module.exports = {
    testEnvironment: "jsdom",
    transform: {
        "^.+\.vue$": "@vue/vue3-jest",
        "^.+\js$": "babel-jest",
    },
    testRegex: "(/__tests__/.*|(\.|/)(test|spec))\.(js|ts)$",
    moduleFileExtensions: ["vue", "js"],
    moduleNameMapper: {
        "^@/(.*)$": "<rootDir>/src/$1",
    },
    coveragePathIgnorePatterns: ["/node_modules/", "/tests/"],
    coverageReporters: ["text", "json-summary"],
    // Fix in order for vue-test-utils to work with Jest 29
    // https://test-utils.vuejs.org/migration/#test-runners-upgrade-notes
    testEnvironmentOptions: {
        customExportConditions: ["node", "node-addons"],
    },
}

从上面的代码可以看出,

testEnvironment选项设置为“jsdom”,它指定要使用的测试环境 。 在本例中,它使用 JSDOM,这是一种 Web 标准的 JavaScript 实现,可在测试期间模拟类似浏览器的环境。


转换选项定义在测试期间如何转换不同的文件类型 。 具体来说,以 .vue 扩展名结尾的文件使用 @vue/vue3-jest 进行转换,这是一个专为 Vue 3 单文件组件 (SFC) 设计的 Jest 转换器。JavaScript 文件 (.js) 使用 babel-jest 进行转换。


testRegex选项设置正则表达式模式以匹配测试文件 。 它搜索位于 / tests / 目录中的文件或具有 .test.js 或 .spec.js 扩展名的文件。此模式允许 Jest 发现并运行符合此条件的测试文件。


moduleFileExtensions选项指定 Jest 应将其视为模块文件的文件扩展名 。 在这种情况下,它包括.vue和.js扩展。


moduleNameMapper选项指定如何解析模块导入。它将Vue项目中常用的@别名映射到src目录。例如,@/example 将被解析为/src/example。


coveragePathIgnorePatterns选项定义计算代码覆盖率报告时应忽略的文件或目录的模式 。 在这种情况下,它排除 /node_modules/ 和 /tests/ 目录中的文件。


coverageReporters选项指定用于代码覆盖率报告的报告器 。 它使用文本报告器在控制台中显示覆盖率信息,并使用 json-summary 报告器生成 JSON 格式的摘要。


testEnvironmentOptions选项提供特定于测试环境的附加选项 。 它将 customExportConditions 设置为 [“node”, “node-addons”],这是使 vue-test-utils 与 Jest 29 配合使用的解决方法。

第3步:配置 Babel Js

要在项目中配置 Babel JS,请按照以下步骤操作:

  • babel.config.js在项目的根目录中创建一个名为的新文件。
  • 将以下代码添加到babel.config.js文件中:
module.exports = {
    env: {
        test: {
            presets: [
                [
                    "@babel/preset-env",
                    {
                        targets: {
                            node: "current",
                        },
                    },
                ],
            ],
        },
    },
}

此代码的目的是导出一个配置对象,该对象指定在测试环境中运行测试时要使用的 Babel 预设。该**env属性定义了不同的环境及其相应的配置设置。在本例中,该env.test.presets**属性指定要在测试环境中应用的 Babel 预设数组。


这些预设由 Babel 插件和配置的集合组成,这些插件和配置针对特定用例捆绑在一起。预设 **@babel/preset-env**用于根据目标环境自动确定所需的 Babel 转换和 polyfill。在此示例中,目标环境设置为node: "current",这确保代码被转换为与当前用于测试的 Node.js 版本兼容的 JavaScript 版本。

第4步:更新package.json文件

要更新该package.json文件,请按照下列步骤操作:

  • 找到 package.json 文件中的“scripts”部分。
  • 将以下行添加到“脚本”部分:
"scripts": {
        ...
        ...
        "test:unit": "jest"
},

在本例中,"test:unit"脚本被定义为运行单元测试。“jest”命令指定为运行脚本时要执行的可执行命令或包。通过将其设置为"jest",将使用 Jest 测试框架

第 5 步:编写你的第一个测试

现在,是时候编写您的第一个测试用例了。我通常更喜欢在同一组件中创建一个测试文件。

  • 创建一个名为 的新组件HelloWorld,并创建一个名为HelloWorld.spec.js.
  • 将以下代码添加到HelloWorld.spec.js文件中:

HelloWorld Component code

<template>
    <div>
        <div>
            <h1>
                {{ msg }}
            </h1>
            <p>...</p>
        </div>
    </div>
</template>
<script setup>
    defineProps({
        msg: {
            type: String,
            required: true,
        },
    });
</script>

HelloWorld Spec Test code

import HelloWorld from "./HelloWorld.vue"
import { mount } from "@vue/test-utils"
describe("HelloWorld", () => {
    it("renders properly", () => {
        const wrapper = mount(HelloWorld, { props: { msg: "Hello Jest" } })
        expect(wrapper.text()).toContain("Hello Jest")
    })
})

第 6步:运行测试

要执行测试,请按照下列步骤操作:

  • 打开命令行界面。
  • 导航到项目的根目录。
  • 运行以下命令:
yarn unit:test

此命令将初始化 Jest 测试框架并运行测试。

万岁,恭喜! 您已成功安装 Jest 并为您的 Vite + Vue 3 项目设置单元测试。🚀 现在您可以编写并运行测试以确保 Vue 组件的正确性和可靠性。通过采用测试驱动的开发方法,您将提高应用程序的整体质量并在开发周期的早期发现错误。


请记住制作涵盖各种场景和边缘情况的全面测试用例,从单元测试工作中获取最大收益。测试愉快

参考地址:https://dev.to/integridsolutions/integrating-jest-testing-into-an-existing-vue-3-project-with-vitejs-3m13



相关文章
|
6月前
|
XML jenkins 机器人
JMeter+Ant+Jenkins实现接口自动化测试持续集成
本文介绍了如何使用Ant生成JMeter接口测试报告,并集成到Jenkins中实现自动化测试。内容涵盖Ant与JMeter环境配置、build.xml文件设置、测试执行及报告生成,同时包括Jenkins插件安装、项目配置和钉钉消息通知的集成,帮助实现持续测试与结果可视化。
800 0
|
4月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
217 6
|
6月前
|
Web App开发 开发框架 .NET
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
Pytest 与 Playwright 集成可提升自动化测试效率,支持参数化测试、多浏览器并行执行及统一报告生成。通过数据驱动、Fixture 管理和并行优化,显著增强测试覆盖率与执行速度,适用于复杂 Web 应用测试场景。
|
10月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
545 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
7月前
|
人工智能 Java 测试技术
SpringBoot 测试实践:单元测试与集成测试
在 Spring Boot 测试中,@MockBean 用于创建完全模拟的 Bean,替代真实对象行为;而 @SpyBean 则用于部分模拟,保留未指定方法的真实实现。两者结合 Mockito 可灵活控制依赖行为,提升测试覆盖率。合理使用 @ContextConfiguration 和避免滥用 @SpringBootTest 可优化测试上下文加载速度,提高测试效率。
399 5
|
11月前
|
存储 人工智能 测试技术
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
141722 29
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
|
6月前
|
测试技术 API C++
Playwright 自动化测试系列(7)| 第三阶段:测试框架集成​​Page Object 模式
本课程详解Playwright测试框架中的Page Object模式,通过电商登录-下单实战演示PO架构设计与高级技巧,结合Pytest实现多用户测试。重点解析PO模式提升代码复用性、降低维护成本的核心价值,并提供常见问题解决方案,助力构建高可维护性的自动化测试体系。
|
7月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
327 0
|
11月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
416 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
11月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
568 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战

热门文章

最新文章