Vue3最佳实践 第八章 ESLint 与 测试 (TypeScript 中Jest与检测环境集成)

news2025/1/16 3:55:21

在这里插入图片描述

TypeScript 中Jest与检测环境集成

  ​Vite 已经发布很久了现在Vue3和Vite的生态正在蓬勃发展,现在很多项目中都用到了Vite +vue3+TypeScript技术栈,进行企业级的项目开发。本文将一步步帮助你创建一个标准的Vite + Vue3 + TypeScript+Jest企业级开发与测试环境。

目录

  • TypeScript 中Jest与检测环境集成
    • 1 Jest 集成
    • 2 Eslint 检测集成
    • 3 Prettier 格式检测集成

第一章 Vue3项目创建 1 Vue CLI 创建vue项目
第一章 Vue3项目创建 2 使用 Webpack 5 搭建 vue项目
第一章 Vue3项目创建 3 Vite 创建 vue项目
第二章 Vue3 基础语法指令
第三章 Vue Router路由器的使用
第四章 VUE常用 UI 库 1 ( element-plus,Ant ,naiveui,ArcoDesign)
第四章 VUE常用 UI 库 2 ( ailwind 后台框架)
第五章 Vue 组件应用 1( Props )
第五章 Vue 组件应用 2 ( Emit )
第五章 Vue 组件应用 3( Slots )
第五章 Vue 组件应用 4 ( provide 和 inject )
第五章 Vue 组件应用 5 (Vue 插件)
第六章 Pinia,Vuex与axios,VueUse 1(Pinia)
第六章 Pinia,Vuex与axios,VueUse 2(Vuex)
第六章 Pinia,Vuex与axios,VueUse 3(VueUse)
第六章 Pinia,Vuex与axios,VueUse 4(axios)
第七章 TypeScript 上
第七章 TypeScript 中
第七章 TypeScript 下 创建Trello 任务管理器
第八章 ESLint 与 测试 ( ESLint )
第八章 ESLint 与 测试 ( Jest )
第八章 ESLint 与 测试 (TypeScript 中Jest与检测环境集成)

1 Jest 集成

  ​我们通过上面的知识创建一个TypeScript项目,然后需要在现在项目中导入ts-jest,@types/jest的测试包。

 npm install --save-dev ts-jest @types/jest

通过下面的命令创建一个TypeScript语法的Jest测试环境。

npm init vite@latest vue-jest-ts
cd vue-jest-ts
npm install
npm install --save-dev @vue/test-utils
npm install --save-dev jest
npm install --save-dev @vue/vue3-jest
npm install --save-dev babel-jest
npm install --save-dev @babel/core
npm install --save-dev @babel/preset-env
npm install --save-dev jest-environment-jsdom
npm install --save-dev @types/jest ts-jest
npm install --save-dev @babel/preset-typescript

集成babel组件与jest组件到Vue项目编辑环境中,在项目中根目录中创建jest.config.cjs文件与.babelrc 文件。

(项目)
├── src
│   ├── App.vue            //vue组件(需要测试)
│   ├── main.ts            //vue配置文件
│   └── tests 
│       └── test.spec.ts   //测试文件
├── package.json           //项目配置文件
├── jest.config.cjs        //jest测试配置文件
├── .babelrc               //babel解析配置文件

jest.config.cjs文件

在文件中加入"^.+\.ts$": “ts-jest” ts文件的解析组件,moduleFileExtensions中设置测试解析文件后缀名称。

module.exports = {
    testEnvironment: 'jsdom',
    testEnvironmentOptions: {
        customExportConditions: ["node", "node-addons"],
     },
    testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(js|ts)$',
    moduleFileExtensions: ['vue', 'js', 'ts'],
      transform: {
        "^.+\\.jsx?$": "babel-jest",
        '^.+\\.vue$' : '@vue/vue3-jest' , 
        "^.+\\.ts$": "ts-jest"
      },
   };

.babelrc 文件

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

package.json 文件

在package.json文件中的scripts属性中加入"test":“jest” 测试命令。

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

App.vue

将App.vue文件中的自动生产的内容修改成下面的代码内容。

<script setup lang="ts">
let name:string="大家好";
</script>
<template>
 <h1> {{name}}</h1>
</template>
<style scoped>
</style>

test.spec.ts 测试文件

在src目录中创建一个test测试目录,在test目中创建一个test.spec.ts 测试文件,我将在est.spec.ts 文件写入车上代码测试TypeScript+jest环境是否集成成功。

import { mount } from '@vue/test-utils';
import app from '../App.vue';
test("测试 Vue3 Component",function(){
  const wrapper = mount(app);
  console.log(wrapper.text())
})

  ​这个时候会出现一个问题,如果测试文件结尾是 js的测试文件,运行测试可以正常运行。但是如果是ts结尾的测试文件会出现错误找不到vue组件。

需要在vite-env.d.ts 文件中加入如下内容。

declare module '*.vue' {
  import type { DefineComponent } from 'vue'
  const component: DefineComponent<{}, {}, any>
  export default component
}

运行命令,测试通过说明我们的环境配置成功。

npm run test
> vue-jest-ts1@0.0.0 test
> jest
  console.log
    大家好
      at Object.<anonymous> (src/test/test.spec.ts:5:11)
 PASS  src/test/test.spec.ts (5.444 s)
  √ 测试 Vue3 Component (61 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total

2 Eslint 检测集成

  ​在真实的项目中不仅要有Jest 测试环境,同时也需要有代码质量检测环境。在项目中加入eslint代码检测功能使用 @eslint/config命令来创建和导入typescript 需要的检测包,如果有不熟悉的地方可以看参考上面ESLint 中TypeSript设置的内容进行配置与导入。

npm install eslint --save-dev
npm install eslint-plugin-vue --save-dev
npm init @eslint/config
也可以直接导入环境包
npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-vue

在跟目录中创建.eslintrc.cjs文件,用于配置eslint检测与项目的集成。注意在vite项目中的配置文件结尾都是cjs结尾。

(项目)
├── src
│   ├── App.vue            //vue组件(需要测试)
│   ├── main.ts            //vue配置文件
│   └── tests 
│       └── test.spec.ts   //测试文件
├── package.json           //项目配置文件
├── jest.config.cjs        //jest测试配置文件
├── .babelrc               //babel解析配置文件
├── .eslintrc.cjs          //eslint语法检测配置文件

.eslintrc.cjs

在.eslintrc.cjs中配置

module.exports = {
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:vue/vue3-essential",
        "plugin:@typescript-eslint/recommended",
    ],
    "overrides": [
    ],
    "parser": "vue-eslint-parser",
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module",
        "parser": "@typescript-eslint/parser",
    },
    "plugins": [
        "vue"
    ],
    "rules": {
    }
}

package.json 文件

在package.json 文件中加入检测命令。

"lint": "eslint --ext .js,.vue,.ts src"

3 Prettier 格式检测集成

导入Prettier 组件到项目中,prettier使用方法查看上面的Prettier中的内容。

npm install prettier --save-dev 
npm install @vue/eslint-config-prettier eslint-plugin-prettier --save-dev

在.eslintrc.cjs中,extends属性中加入“@vue/prettier”格式化组件。

module.exports = {
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:vue/vue3-essential",
        "plugin:@typescript-eslint/recommended",
        "@vue/prettier"
    ],
    "overrides": [
    ],
    "parser": "vue-eslint-parser",
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module",
        "parser": "@typescript-eslint/parser",
    },
    "plugins": [
        "vue",
        "@typescript-eslint"
    ],
    "rules": {
    }
}

项目根目录中创建 .prettierrc文件,用于Prettier检测格式规则设置。

(项目)
├── src
│   ├── App.vue            //vue组件(需要测试)
│   ├── main.ts            //vue配置文件
│   └── tests 
│       └── test.spec.ts   //测试文件
├── package.json           //项目配置文件
├── jest.config.cjs        //jest测试配置文件
├── .babelrc               //babel解析配置文件
├── .eslintrc.cjs          //eslint语法检测配置文件
├── .prettierrc            //Prettier格式检测配置文件

.prettierrc文件

在.prettierrc文件中设置vue项目中最长用到的格式规则。

{
    #换行的长度
    "printWidth": 120,
    #指定缩进的空格数
    "tabWidth": 2,
    #用单引号括起来
    "singleQuote": false,
    # 设置尾随逗号
    "trailingComma": none,
    # 在语句末尾设置分号
    "semi": true,
    # 为Vue的脚本和样式标签指定缩进
    "vueIndentScriptAndStyle": true
}

package.json 设置

在package.json文件中加入prettier命令,可以单独使用格式检测修复而不用和eslint指令一起执行,效果和–fix命令效果一样。

  "scripts": {
    ......
    "lint": "eslint --ext .js,.vue,.ts src",
    "format": "prettier -w src/**/*.{ts,vue}",
    "test": "jest"
  },

作为解决方案,我们需要设置

npm install --save-dev jest-environment-jsdom
npm install --save-dev @vue/babel-preset-app or @vue/cli-plugin-babel

jest-environment-jsdom 是一个 Jest 测试环境,它使用 jsdom 模拟浏览器环境,使得可以在 Jest 中运行浏览器 API 和 DOM API。

jest.config.cjs
module.exports = {
    testEnvironment: 'jsdom',
    testEnvironmentOptions: {
        customExportConditions: ["node", "node-addons"],
     },
    moduleFileExtensions: [
        "js",
        "json",
        "vue"
      ],
      transform: {
        ".*\\.(vue)$": "@vue/vue3-jest",
        '^.+\\.js$'  : 'babel-jest',
      }
  }
jest.config.cjs
module.exports = {
    presets: [
      [
        '@vue/app',
        {
          useBuiltIns: 'entry'
        }
      ],
    ],
  };
import { mount } from '@vue/test-utils';
import { zht } from '../components/zht';
const App = {
  template:`
  <div>Hello World</div>
  `
}
test("test App Component",function(){
  const wrapper = mount(App);
  console.log(wrapper.text())
  expect(8 + 2).toBe(zht());
})

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

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

相关文章

wxpython如何设置window上任务栏的进度条

该功能是各大编译器或者一些软件在执行耗时操作时&#xff0c;显示进度的一种方式&#xff1a; Qt 如果是使用的pyQt或者是Qt就很简单了&#xff0c;直接使用QWinTaskbarProgress就可以完成该功能。 Wxpython 但是wxpython就没有那么简单了&#xff0c;需要了解一些window的特…

项目经理有责任,没权利,如何确保项目顺利交付?

由于项目经理在项目中所背负的责任并未被赋予相应的权力&#xff0c;因此在协调资源和组织协同工作方面&#xff0c;他们无法简单地借助权力来解决问题。一旦项目出现问题&#xff0c;不论责任在哪一方&#xff0c;项目经理都首当其冲地需要承担责任。 虽然项目经理看似权力很…

SVN出现Cleanup failed to process the following paths...

SVN报错&#xff0c;需要执行SVN的清理命令clean up&#xff0c;但clean up时出现错误Cleanup failed to process the following paths... 解决办法&#xff1a; 1、clean up的窗口&#xff0c;勾选Break locks和Fix time stamps&#xff08;简单方便&#xff09;&#xff1b…

ESP8266模块常规调试过程讲解

ESP8266-WIFI模块串口调试过程讲解 一、ESP8266介绍 ESP8266是一个高度集成的无线SoC(System on a Chip)模块,基于ESP8266芯片,集成了Wi-Fi功能。具有丰富的特性和功能,广泛应用于各种物联网项目中。 ESP8266模块支持802.11b/g/n无线标准,内置TCP/IP协议栈,可以实现串…

Linux之centos7安装配置及Linux常用命令

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《LInux实战开发》。&#x1f3af;&#x1f3af; …

私有云:【7】VCenter安装Composer服务

私有云&#xff1a;【7】VCenter安装Composer服务 1、创建Composer数据库2、VCenter安装Composer服务2.1、安装Native Client组件2.2、对Composer服务器扩容出一个安装盘 3、安装Composer服务 服务器创建好后配置IP&#xff0c;加入域以及添加域管理员cloudadmin&#xff0c;可…

如何校准振弦采集模块以获得更准确的读数?

如何校准振弦采集模块以获得更准确的读数&#xff1f; 振弦采集模块是一种用于测量振弦传感器输出的模块。在使用振弦采集模块时&#xff0c;校准是非常重要的&#xff0c;因为它可以确保您获得准确的测量结果。本文将介绍如何校准振弦采集模块以获得更准确的读数。 1. 使用标…

华为OD机试 - 堆栈中的剩余数字 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&a…

如何零样本实现语义分割

CLIPTeacher&#xff1a;一种基于VLM的通用零样本语义分割框架&#xff0c;有效地利用了可见和忽略区域&#xff0c;而不需要对原CLIP模型进行任何更改&#xff0c;性能提升显著&#xff01;单位&#xff1a;名古屋大学 现有的通用零样本语义分割&#xff08;GZLSS&#xff09…

校园快递派送互助系统 微信小程序设计与实现

本毕业设计的内容是设计实现一个基于Springboot微信小程序的快递校园帮。使用微信开发者是以java语言进行开发&#xff0c;MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。快递校园帮的功能已基本实现&#xff0c;主要包括有用户、快递员、快递公司、快递…

使用Panda-Gym的机器臂模拟进行Deep Q-learning强化学习

强化学习(RL)是一种机器学习方法&#xff0c;它允许代理通过试错来学习如何在环境中表现。行为主体因采取行动导致预期结果而获得奖励&#xff0c;因采取行动导致预期结果而受到惩罚。随着时间的推移&#xff0c;代理学会采取行动&#xff0c;使其预期回报最大化。 RL代理通常使…

Kubernetes概念及实践

Kubernetes(K8S)中文文档_Kubernetes中文社区 Kubernetes 文档 | Kubernetes K8S 是负责自动化运维管理多个跨机器 Docker 程序的 集群。 kubeadm快速部署K8s集群的工具&#xff0c;如&#xff1a; 创建master node&#xff1a;kubeadm init 将worker node加入到集群中&#x…

Qt 重写QSlider简单实现滑动解锁控件(指定百分比回弹效果)

组件效果图: 应用场景: 用于滑动解锁相关场景,Qt的控件鼠标监听机制对于嵌入式设备GUI可触摸屏依旧可用。 实现方式: 主要是通过继承QSlider以及搭配使用QStyleOptionSlider来实现效果。 注意细则: QStyleOptionSlider是用于定制空白区域是否可移动滑块,根据需求可…

MySQL 到 TiDB:vivo 的 Hive Metastore 横向扩展之路

以下文章来源于公众号 vivo 互联网技术 &#xff0c;作者 Wang Zhiwen 导读 本文介绍了 vivo 在大数据元数据服务横向扩展道路上的探索历程&#xff0c;由实际面临的问题出发&#xff0c;对当前主流的横向扩展方案进行了调研及对比测试&#xff0c;通过多方面对比数据择优选择…

10_4阻塞和非阻塞跟poll和等待队列

阻塞和非阻塞 广泛上的区别就是 应用程序如果非阻塞那读取不到数据就应该马上有返回值 阻塞的话就是在应用程序去read数据,但是设备驱动没有数据,就一直卡住,直到有数据再继续往下 补充阻塞知识,应用层大部分都是阻塞 如果要非阻塞 ,应用程序在打开设备节点的时候填写int fd …

文件夹比较工具怎么用 对比两个文件夹找出多余的文件

在日常工作中&#xff0c;经常会接触到大量的文件&#xff0c;长时间堆积&#xff0c;文件夹会越来越多&#xff0c;从而导致文件重复&#xff0c;如果想要找出想要的文件会比较麻烦&#xff0c;那么你知道应该怎么来查找吗&#xff1f;下面就让我们来学习一下文件夹比较工具怎…

【LeetCode刷题-哈希】-- 705.设计哈希集合

705.设计哈希集合 方法&#xff1a;使用链地址法 设哈希表的大小为base&#xff0c;可以设计一个简单的哈希函数&#xff1a;hash(x) x mod base 开辟一个大小为base的数组&#xff0c;数组的每个位置是一个链表&#xff0c;当计算出哈希值后&#xff0c;就插入到对应位置的…

华为OD机试 - 计算疫情扩散时间 - 矩阵(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

在CentOS上用yum方式安装MySQL8真实全过程记录(顺利版本)

此文参考我前面的文章《在CentOS上用yum方式安装MySQL8过程记录》&#xff0c;之前比较曲折&#xff0c;现在再安装一台mysql。 因为之前很多坑已经走过&#xff0c;加上这台Linux之前没安装过MYSQL&#xff0c;所以整个过程算是非常顺利。 安装环境&#xff1a;centos7 mysql…

【c++|opencv】一、基础操作---1.图像读取

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 有关c操作opencv记录 1. 正文 1.1 图像读取、显示、保存 // 读取、显示、保存图像#include <opencv2/opencv.hpp> #include <iostream>us…