在vue3中测试执行typescript代码片段

官方推荐的vitest方法

在vue3+typescript项目中,一般来说用vite做构建系统。做测试的话,目前官方推荐的是vitest。官方文档在

https://vitest.dev/guide/

在vue3+typescript+vite5项目中,运行安装命令

npm install -D vitest

就可以把vitest安装好。

在package.json中的script段增加一行

"test": "vitest run"

在vite.config.ts文件中,加入首行

/// <reference types="vitest" />

 在plugins段增加一条

test: {// include:['**/*.{test,spec}.?(c|m)[jt]s?(x)'],globals: false,environment: "jsdom",
},

这是对vitest的配置项。因为我是用vue3开发网页,所以这里用的environment是jsdom

在项目目录的src目录创建一个test目录,在这个目录中写测试代码

按照vitest的约定,测试代码的命名规则是test_name.spec.ts或者test_name.test.ts,其中test_name由开发者自己定义,后面的spec.ts或者test.ts则是系统要求的。将来在调用时,可以在项目的根目录运行命令

npm test test_name

就可以针对这个文件单独进行测试,而不必按照监控模式随时测试,也不必一次性把所有的测试用例全跑一遍,因为后面两种模式速度比较慢。

按照vitest的官方文档中的例子

// sum.test.js
import { expect, test } from 'vitest'
import { sum } from './sum'for(let i:number=0;i<20;++i){console.log([Math.random(), Math.randome()])
}test('adds 1 + 2 to equal 3', () => {expect(sum(1, 2)).toBe(3)
})

其中sum来自开发者自己开发的代码,通过test、expect、toBe就可以进行测试

实际上这个代码是按照从上到下的顺序执行的,也就是说,在test被调用之前,其实还可以做很多。比如说有这么一个函数,可以生成一系列散列点,而且是随机的,所以无法直接在test里通过expect和toBe来测试,但是可以在test之前,通过console.log()来输出,然后用其他工具——比如Excel——对这些输出数据进行处理——比如绘制散点图——来检查。

在一个vue3项目中,因为目录和代码组织的关系,必须要靠vite才能把不同目录的代码组织起来。以前js时代还勉强可以用node搞一搞,直接把一些调用函数的引用关系用相对目录写死,但是ts还需要编译,这种方法几乎不可行。直接简单的写一个ts文件,是不能通过npm直接调用这个ts文件来运行的。但是通过vitest就可以这样直接运行了。

一般来讲,这种方式我会用来测试执行复杂的关联比较多的函数。

直接用vite生成新项目来测试小组件

对于大型项目而言,单文件组件single file component缩写SFC是广泛使用的。

单文件组件 | Vue.js

vitest提供了vue3组件测试的功能,但是经过实践检验,它仅用于测试组件是否出错,比如说语法错误之类,但是对于组件最终的呈现效果,是不会呈现的,所以有时候vitest测试vue3 component没出错,但是这并不意味着没有问题。

所以我一般还会单独测试小组件。方法就是用vite生成一个新的项目

开始 | Vite 官方中文文档

npm create vite@latest

随后按照提示选择vue3和typescript,这样就生成了一个新的最简单的项目。

在这个新生成的项目里,直接把新开发的component放进去,然后检查其呈现效果。

如果这个component需要一些额外的数据,可以通过上面章节vitest运行特定的程序来输出,再把输出结果直接复制粘贴到这个新项目的component里作为硬编码。反正只是临时性测试,硬编码就别在意了。

但是如果使用这种方法也无法检测出问题所在,尤其是怀疑到vue3本身的时候,就必须要使用更底层的方法来处理。

直接用vite生成新项目来测试typescript代码

vite一般是搭配一个框架来构建项目,这个框架一般是vue3或者react。但是其实vite可以构建一个不依赖于任何“框架”的typescript项目。在

npm create vite@latest

 之后按照提示选择Vanilla和typescript即可。这样vite就会创建一个纯粹的不基于任何框架的typescript项目。

如果怀疑代码涉及到vue3内部的一些机制导致代码出错,这个时候可以用这种方式构建一个完全不依赖vue3的项目,在这里测试这些“纯”代码。

那么为什么不直接不使用任何构建系统,用一个空的html和js来测试呢?

因为如果涉及到npm包,如果手动下载配置就会很麻烦,尤其是很难得到编辑器的高亮显示和跳转支持。另外如果开发者自己开发的代码中涉及到复杂的目录组织,涉及到import/export,直接用空的html来测试就会非常麻烦。

采用vite生成不依赖框架的项目,最适合这种情况。

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

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

相关文章

批量获取oracle库存储过程

场景:需要获取oracle库下的存储过程做备份 示例:获取单个存储过程,sql实现如下 SELECT owner,object_name,object_type FROM dba_objects; SELECT DBMS_LOB.SUBSTR(DBMS_METADATA.GET_DDL(FUNCTION,CONCATSTR,TEST)) FROM DUAL; CREATE OR REPLACE EDITIONABLE FUNCTION &quo…

【教学类-55-02】20240512图层顺序挑战(四格长条纸加黑色边框、4*4、7张 、43200张去掉非7色有23040张,去掉重复样式有几种?)

作品展示 背景需求&#xff1a; 之前的代码吗存在几个问题&#xff0c;最大的问题是不能生成“”长条黑边框”” 【教学类-55-01】20240511图层顺序挑战&#xff08;四格长条纸&#xff09;&#xff08;4*4&#xff09;和“手工纸自制参考图”-CSDN博客文章浏览阅读485次&…

使用Navicat将MySql数据库导入和导出

一&#xff0c;导出数据表 1.使用Navicat打开数据库&#xff0c;右键数据库&#xff0c;点击转储SQL文件&#xff0c;点击结构和数据。 2.选择生成文件的地方 3.等待生成完成 4.生成完成 二&#xff0c;导入数据库表和数据SQL文件 1.新建一个数据库 2.右键选择运行SQl文件 记…

OSPF协议1

OSPF开放式最短路径优先协议 1&#xff0c;OSPF协议因为其传递的是拓扑信息&#xff0c;之后&#xff0c;通过SPF算法将图形结构转换成为树形结构&#xff0c;所以&#xff0c;其计算出的路径不存在环路。并且&#xff0c;OSPF是使用带宽作为开销值的评判标准&#xff0c;所以…

如何利用甘特图来提高资源的是使用效率?

在项目管理中&#xff0c;甘特图是一种常用的工具&#xff0c;用于规划和跟踪项目进度。它通过条形图的形式展示项目的时间表和任务依赖关系&#xff0c;帮助项目经理和团队成员清晰地了解项目的时间线和进度。通过合理利用甘特图&#xff0c;可以显著提高资源的使用效率&#…

一文入门DNS

概述 DNS是一个缩写&#xff0c;可以代表Domain Name System&#xff0c;域名系统&#xff0c;是互联网的一项基础服务。也可以代表Domain Name Server&#xff0c;域名服务器&#xff0c;是进行域名和与之相对应的IP地址相互转换的服务器。DNS协议则是用来将域名转换为IP地址…

1W、2W 3KVAC隔离 宽电压输入 交直两用AC/DC 电源模块 ——TP01(02)AZ 系列

TP01(02)AZ为客户提供一款超小体积模块式开关电源&#xff0c;该系列模块电源输出功率为1W、2W&#xff0c;具有极低的空载损耗&#xff0c;低漏电流仅0.1mA&#xff0c;小体积&#xff0c;隔离耐压高达3KV等特点。产品安全可靠&#xff0c;EMC 性能好&#xff0c;EMC 及安全规…

Ubuntu安装Mysql数据库无法远程连接

1.远程端口未开 2.Mysql 数据库中user表 2.1 用户名root 的host字段味更改为% 允许远程访问&#xff1b; use mysql;SELECT user,host,plugin,authentication_string FROM user;userhostpluginauthentication_stringroot%auth_socketdebian-sys-maintlocalhostcaching_sha2_p…

树莓派配置双网卡分别为AD HOC和AP模式

树莓派配置双网卡分别为AD HOC和AP模式 需求说明&#xff1a;为了实现分级网络管理&#xff0c;将多个无人机分簇&#xff0c;簇间使用AD HOC进行无中心自组织的网络&#xff0c;簇内使用AP-AC模式进行中心化网络。因此&#xff0c;需要配置一台设备&#xff0c;同时完成AD HOC…

Quartz.Net(1)

Quartz 1 Quartz是一个强大的、开源的、轻量级的任务调度框架 Quartz官方文档 2 Quartz中有五个重要的概念 Scheduler 调度器Trigger 触发器Job 工作任务ThreadPool 线程池 &#xff0c;不是CLI的线程池&#xff0c;而是Quartz特有的线程池JobStrore 调度存储&#xff0c;存…

三、配置带HybridCLR的ARCore开发环境

预告 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 专栏&#xff1a; Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景&#xff0c;简化了AR开发流程&#xff0c;让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…

【eclipse】如何在IDE里创建一个Java Web项目?

如何在eclipse中创建一个动态Web项目并成功运行&#xff1f; 一、 最终效果 懒得写那么多了…我也不知道该怎么写了&#xff0c;有点乱&#xff0c;有问题可以在评论里留言&#xff0c;我看到会解决的&#xff0c;在这个过程中也踩到了一些坑&#xff0c;但好在有CSDN帮助解决…

【C++杂货铺】红黑树

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 红黑树的概念 &#x1f4c1; 红黑树的性质 &#x1f4c1; 红黑树节点的定义 &#x1f4c1; 红黑树的插入操作 &#x1f4c1; 红黑树和AVL树的比较 &#x1f4c1; 全代码展示 &#x1f4c1; 总结 &#x1f308;前言…

文章模版--测试

学习目标&#xff1a; 提示&#xff1a;这里可以添加学习目标 例如&#xff1a; 一周掌握 Java 入门知识 学习内容&#xff1a; 提示&#xff1a;这里可以添加要学的内容 例如&#xff1a; 搭建 Java 开发环境掌握 Java 基本语法掌握条件语句掌握循环语句 学习时间&#…

四川汇昌联信:拼多多网点怎么开?大概需要多少钱?

想要开一家拼多多网点&#xff0c;你肯定很关心需要准备多少资金。下面&#xff0c;我们就来详细解答这个问题&#xff0c;并从多个角度分析开设网点的要点。 一、 开设拼多多网点&#xff0c;首要任务是确定启动资金。根据不同的经营模式和地区差异&#xff0c;成本会有所不同…

WIFI模块的AT指令联网数据交互--第十天

1.1.蓝牙&#xff0c;ESP-01s&#xff0c;Zigbee, NB-Iot等通信模块都是基于AT指令的设计 初始配置和验证 ESP-01s出厂波特率正常是115200, 注意&#xff1a;AT指令&#xff0c;控制类都要加回车&#xff0c;数据传输时不加回车 1.2.上电后&#xff0c;通过串口输出一串系统…

【面试经典题】环形链表

个人主页&#xff1a;一代… 个人专栏&#xff1a;数据结构 在面试中我们经常会遇到有关链表的相关题目&#xff0c;面试官通常会对题目给出拓展 下面我就两个leetcode上的一个双指针的题目为例&#xff0c;并对其进行拓展 题目链接&#xff1a;环形链表 题目描述&#xf…

145.二叉树的后序遍历

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

深入理解前端性能优化:从网络到渲染

1. 网络优化 减少HTTP请求 合并资源&#xff1a;通过合并CSS和JavaScript文件减少请求次数。资源内联&#xff1a;对于小的CSS和JavaScript&#xff0c;直接内联到HTML中。 使用HTTP/2 HTTP/2支持多路复用&#xff0c;减少请求阻塞&#xff0c;提高加载速度。 开启GZIP压缩…

Android获取系统常用阈值

问题 我自定义了一个控件&#xff0c;重写了其默认的OnTouch事件 这样系统自带的OnClickListener和OnLongClickListener就会失效 现在我想手动在OnTouch里实现Click和LongClick功能 这个很容易解决&#xff0c;通过touch时长就很容易实现 但是我想让LongClick触发的Time和系统…