第7章 Vite的测试和调试

测试和调试是软件开发过程中的重要环节。通过合理的测试策略和调试技巧,可以大幅提高代码的质量和稳定性。本章将介绍如何在 Vite 项目中进行单元测试、集成测试和端到端测试,以及常用的调试方法和工具。

1 单元测试

单元测试是对最小可测试单元进行验证的测试,通常用于测试函数、组件等。我们将使用 Jest 作为测试框架,结合 Vue Test Utils 对 Vue 组件进行测试。

1.1 安装 Jest 和 Vue Test Utils

首先,安装必要的依赖:

npm install --save-dev jest @vue/test-utils vue-jest babel-jest

1.2 配置 Jest

在项目根目录下创建 jest.config.js 文件:

module.exports = {moduleFileExtensions: ['js', 'json', 'vue'],transform: {'^.+\\.vue$': 'vue-jest','^.+\\.js$': 'babel-jest'},testEnvironment: 'jsdom'
}

在根目录下创建 .babelrc 文件:

{"presets": ["@babel/preset-env"]
}

1.3 编写单元测试

创建一个简单的 Vue 组件和对应的测试文件。

组件文件

src/components/HelloWorld.vue

<template><div><h1>{{ msg }}</h1><button @click="increment">Count: {{ count }}</button></div>
</template><script>
export default {props: {msg: String},data() {return {count: 0}},methods: {increment() {this.count++}}
}
</script>
测试文件

src/components/__tests__/HelloWorld.spec.js

import { shallowMount } from '@vue/test-utils'
import HelloWorld from '../HelloWorld.vue'describe('HelloWorld.vue', () => {it('renders props.msg when passed', () => {const msg = 'new message'const wrapper = shallowMount(HelloWorld, {props: { msg }})expect(wrapper.text()).toMatch(msg)})it('increments count when button is clicked', async () => {const wrapper = shallowMount(HelloWorld)const button = wrapper.find('button')await button.trigger('click')expect(wrapper.text()).toContain('Count: 1')})
})

1.4 运行测试

package.json 中添加测试脚本:

{"scripts": {"test": "jest"}
}

运行测试:

npm test

2 集成测试

集成测试验证多个组件或模块之间的交互。我们仍然可以使用 Jest 和 Vue Test Utils 来进行集成测试。

2.1 编写集成测试

src/components/__tests__/App.spec.js

import { shallowMount } from '@vue/test-utils'
import App from '../../App.vue'
import HelloWorld from '../HelloWorld.vue'describe('App.vue', () => {it('renders HelloWorld component', () => {const wrapper = shallowMount(App)expect(wrapper.findComponent(HelloWorld).exists()).toBe(true)})
})

3 端到端测试

端到端测试(E2E 测试)模拟用户操作,验证应用的整体功能。我们将使用 Cypress 进行 E2E 测试。

3.1 安装 Cypress

安装 Cypress 依赖:

npm install --save-dev cypress

3.2 配置 Cypress

在项目根目录下创建 cypress 文件夹,包含以下目录结构:

cypress/├── fixtures/├── integration/├── plugins/└── support/

cypress/plugins/index.js 文件中配置 Cypress:

module.exports = (on, config) => {// 配置代码
}

3.3 编写端到端测试

cypress/integration 文件夹中创建测试文件:

cypress/integration/app.spec.js

describe('App', () => {it('loads the app and renders HelloWorld component', () => {cy.visit('/')cy.contains('h1', 'Hello Vite')})it('increments count when button is clicked', () => {cy.visit('/')cy.contains('button', 'Count: 0').click()cy.contains('button', 'Count: 1')})
})

3.4 运行端到端测试

package.json 中添加脚本:

{"scripts": {"e2e": "cypress open"}
}

运行 Cypress:

npm run e2e

4 调试

调试是开发过程中不可或缺的一部分。我们将介绍几种常用的调试方法和工具。

4.1 使用浏览器开发者工具

大多数现代浏览器都提供了强大的开发者工具,允许你设置断点、查看变量、调试代码。

设置断点

打开浏览器开发者工具(通常按 F12Ctrl+Shift+I),在源代码中找到需要调试的文件,点击行号设置断点。

查看变量

在断点处暂停后,可以在控制台中输入变量名查看其值,也可以在“Scope”面板中查看当前上下文中的所有变量。

4.2 使用 Vite 的调试工具

Vite 提供了内置的调试工具,可以帮助你快速定位和解决问题。

启用源映射

确保在 vite.config.js 中启用源映射:

import { defineConfig } from 'vite'export default defineConfig({build: {sourcemap: true}
})

4.3 使用 VS Code 调试

VS Code 提供了强大的调试功能,配合 Vite 可以实现高效的调试体验。

配置 VS Code 调试

在项目根目录下创建 .vscode/launch.json 文件:

{"version": "0.2.0","configurations": [{"type": "chrome","request": "launch","name": "Launch Chrome against localhost","url": "http://localhost:3000","webRoot": "${workspaceFolder}","sourceMaps": true,"sourceMapPathOverrides": {"webpack:///src/*": "${webRoot}/src/*"}}]
}

启动 Vite 开发服务器:

npm run dev

在 VS Code 中启动调试:

  1. 打开调试面板 (Ctrl+Shift+D)。
  2. 选择 Launch Chrome against localhost 配置。
  3. 点击“开始调试”按钮。

4.4 使用日志调试

在代码中使用 console.log 打印调试信息是最简单的调试方法。

export default {data() {return {count: 0}},methods: {increment() {this.count++console.log(`Count is now: ${this.count}`)}}
}

通过本章的学习,你应该掌握了在 Vite 项目中进行单元测试、集成测试和端到端测试的基本方法,以及常用的调试技巧和工具。这些知识将帮助你提高代码的质量和稳定性。下一章将介绍 Vite 的部署和发布策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UWB:FiRa Consortium UCI Generic Technical Specification v1.1.0(1)- UCI架构和通用数据包头

FiRa fine ranging 精确测距 为了UWB产业能够蓬勃发展&#xff0c;各个公司的产品必须互联互通&#xff0c;不然就是一盘散沙&#xff0c;成不了气候。于是成立了FiRa UWB联盟&#xff0c;相当于WiFi里面的WiFi alliance&#xff08;WiFi联盟&#xff09;&#xff0c;蓝牙里面…

uniapp x — 跨平台应用开发的强大助力

摘要&#xff1a; 随着前端技术的不断演进&#xff0c;跨平台应用开发框架成为了提升开发效率、降低开发成本的重要工具。uni-app以其跨平台兼容性和丰富的功能受到了开发者的广泛青睐。然而&#xff0c;随着应用需求的日益增长&#xff0c;对框架的功能和性能要求也在不断提高…

洛谷P1498 南蛮图腾[递归好题]

南蛮图腾 题目背景 自从到了南蛮之地&#xff0c;孔明不仅把孟获收拾的服服帖帖&#xff0c;而且还发现了不少少数民族的智慧&#xff0c;他发现少数民族的图腾往往有着一种分形的效果&#xff0c;在得到了酋长的传授后&#xff0c;孔明掌握了不少绘图技术&#xff0c;但唯独…

【Android】kotlin jdk版本冲突与Kotlin依赖管理插件

1、androidx.activity&#xff1a;activity&#xff1a;1.8.0 依赖版本错误问题 *依赖项“androidx.activity&#xff1a;activity&#xff1a;1.8.0”要求依赖它的库和应用针对版本 34 或更高版本 Android API 进行编译。&#xff1a;app 目前是针对 android-33 编译的。此外…

短视频带货的新趋势:揭秘萤瓴优选智能分镜功能的轻资产另类新风口

随着互联网的飞速发展&#xff0c;短视频平台如雨后春笋般崛起&#xff0c;短视频带货已成为电商领域的新宠。在这个趋势下,萤瓴优选凭借其独特的智能分镜功能&#xff0c;引领了一股轻资产另类新风口&#xff0c;为众多电商从业者带来了新的机遇。本文将深入探讨短视频带货的新…

解决:Failed to load PostCSS config: Failed to load PostCSS config

报错信息: [Failed to load PostCSS config: Failed to load PostCSS config (searchPath: D:/project/vite-vue-project): [Error] Must use import to load ES Module: D:\project\vite-vue-project\postcss.config.ts require() of ES modules is not supported. require(…

【Spring】springSecurity中WebSecurityConfigurerAdapter类中configure方法(5版本以下)

1、简介 在Spring Security中&#xff0c;WebSecurityConfigurerAdapter 类是一个配置适配器&#xff0c;它提供了多种 configure 方法的重载&#xff0c;允许开发者以声明性的方式配置Web安全。 2、相关规则 1. configure(WebSecurity web) 此方法用于配置哪些请求应该被Sp…

10个JavaScript One-Liners让初学者看起来很专业

原文链接&#xff1a;https://pinjarirehan.medium.com/10-javascript-one-liners-for-beginner-developers-to-look-pro-b9548353330a 原文作者&#xff1a;Rehan Pinjari 翻译&#xff1a;小圆 你是不是在辛苦码字时&#xff0c;看到别人轻松甩出一行 JavaScript 就搞定难题…

量化机器人对投资策略的调整

量化机器人在现代投资管理中扮演着越来越重要的角色&#xff0c;尤其在调整和优化投资策略方面表现出其独特的价值。通过运用先进的算法、人工智能和大数据分析&#xff0c;这些机器人能够实现投资策略的高度自动化调整&#xff0c;帮助投资者适应不断变化的市场环境。 首先&a…

DangerWind-RPC-framework---三、服务端下机

当一台机器下线时&#xff0c;面临很多问题&#xff1a;如何将其从注册中心下线&#xff1f;如何清理释放资源&#xff1f;客户端拉取服务列表时也使用了本地缓存&#xff0c;如何及时更新本地缓存&#xff1f; 服务端机器的优雅下线需要使用ShutdownHook&#xff0c;这相当于添…

前端八股文 插槽的使用场景

什么是插槽 官方解释&#xff1a;Vue 实现了一套内容分发的 API&#xff0c;将 元素作为承载分发内容的出口。 大白话&#xff1a;插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot> 表示&#xff0c;父组件可以在这个占位 符中填充任何模板代码&am…

苹果笔记本电脑能玩哪些游戏 苹果电脑可以玩的单机游戏推荐

苹果笔记本有着优美的外观和强大的性能。用户不仅可以使用苹果笔记本办公、剪辑&#xff0c;越来越多的用户开始关注苹果笔记本在游戏领域的表现&#xff0c;尤其是在大型游戏方面。本文将为你详细介绍苹果笔记本都能玩什么游戏&#xff0c;以及为你推荐苹果电脑可以玩的单机游…

Mybatis之动态sql、缓存、分页、配置数据源

SQL动态查询 if标签 当传递某个DTO时&#xff0c;需要根据某个属性是否存在而动态增加条件时&#xff0c;就可以使用if标签 <select id"getUser" resultType"user">select id, name, age, sex from user where 11<if test"userDto.name !…

EventBus原理分析

EventBus 是一个流行的事件发布/订阅框架&#xff0c;主要用于简化 Android 应用中不同组件之间的通信。它的设计基于观察者模式&#xff0c;可以有效地减少组件间的耦合性&#xff0c;使得代码更加模块化和可维护。 下面是 EventBus 的实现原理&#xff0c;结合其源码进行说明…

快到不可思议!Internet Download Manager下载器,让你的网速飞起来!

&#x1f31f; 快到不可思议&#xff01;Internet Download Manager下载器&#xff0c;让你的网速飞起来&#xff01;&#x1f680; 嗨喽&#xff0c;各位csdn的朋友们&#xff01;&#x1f44b;今天我要跟大家分享一个我超爱的下载神器——Internet Download Manager&#xff…

MySQL相关函数

SQL函数 聚合函数 定义&#xff1a;聚合函数作用与一组数据&#xff0c;并对一组数据返回一个值。 常用&#xff1a;AVG()、SUM()、MAX()、MIN()、COUNT()。 说明&#xff1a;聚合函数不能嵌套使用。 字符串函数 MYSQL中常用的字符串函数&#xff1a; 函数名作用concat(s1,s…

springboot+vue项目实战2024第三集修改用户信息

1.获取用户信息 GetMapping("/userInfo")// RequestHeader(name "Authorization") String tokenpublic Result<User> userInfo(){// Map<String, Object> map JwtUtil.parseToken(token);Map<String,Object> map ThreadLocalUti…

基于uni-app与图鸟UI的知识付费小程序模板

一、项目概述 在知识经济蓬勃发展的背景下&#xff0c;移动互联网成为知识传播与消费的重要渠道。本项目旨在利用前沿的前端技术栈——uni-app及高效UI框架图鸟UI&#xff0c;打造一款集多功能于一体的、面向广大求知者的知识付费平台移动端模板。该模板旨在简化开发流程&…

Java:分批查询

前言 最近遇到一个场景问题&#xff0c;就是基于SQL server数据库的规范&#xff0c;查询条件in如果个数超过2100个就会报错。由于是ORM映射框架采用的MybatisPlus 起初我想到的是基于 MybatisPlus 的 参数分割&#xff0c;测试还是不行&#xff0c;于是就直接基于 mybatis xm…

自定义业务非受检异常

【受检和非受检异常】 受检异常&#xff1a;当你需要强制调用者对异常异常进行处理时&#xff0c;抛出该类型异常。往往适用于开发通用的底层接口、或者调用第三方出现异常时。 非受检异常&#xff1a;当你不需要调用者关心时&#xff0c;抛出该类型异常。往往适用于普通的业务…