Vue进阶(四十五)Jest集成指南

news2024/11/19 0:14:41

文章目录

    • 一、前言
    • 二、环境检测
    • 三、集成问题汇总
    • 四、拓展阅读

一、前言

在前期博文《Vue进阶(八十八)Jest》中,讲解了Jest基本用法及应用示例。一切顺利的话,按照文档集成应用即可,但是集成过程中遇到的问题可能五花八门,此篇博文主要分享Vue集成Jest阶段遇到的问题及解决方案。

首先,需要确认项目自身环境参数配置,主要涉及babeljestbabel-jest,应用其中某个不合适的版本可能会导致各种嵌套问题出现,最终无法集成Jest。

二、环境检测

首先,检查项目应用的babel-corebabel-loader版本号,如果babel-core的版本号高于7且babel-loader的版本号高于8,则可按照以下步骤安装jest相关依赖。

如果babel-core版本为6,则需要安装babel-loader的版本也是6,不能高于8,另外安装下面依赖时需注意:

  • jest版本为21、22,推荐:^22.4.0
  • babel-jest为21、22,推荐:^22.4.0

检测项目nodenpm版本。版本低可能导致安装jest,vue/test-utils等依赖安装失败。

推荐使用npm版本>=6.9.0npm -v),推荐node版本>=10.15.0node -v

安装jest,通用js可以使用jest写单元测试。
安装命令:npm i -D jest@^22.4.0 或者 npm install --save-dev jest@^22.4.0

安装babel-jestBabel-jest对Es6+js进行转译。
安装命令:npm i -D babel-jest@^22.4.0 或者 npm install --save-dev babel-jest@^22.4.0

安装vue/test-utils。可以用来编写vue文件的单元测试
安装命令:npm i -D @vue/test-utils@^1.3.6或者 npm install --save-dev @vue/test-utils@^1.3.6

安装vue-jest,配合vue/test-utils使用。
安装命令:npm i -D vue-jest@3.0.6 或者 npm install --save-dev vue-jest@3.0.6

安装jsdom-global,为vue/test-utils运行器提供浏览器环境。
安装命令:npm i -D jsdom-global@^3.0.2 或者 npm install --save-dev jsdom-global@^3.0.2 `

安装jest-serializer-vue,序列化测试结果。
安装命令:npm i -D jest-serializer-vue@^3.1.0 或者 npm install --save-dev jest-serializer-vue@^3.1.0

依赖安装完成后,要关注关注项目能否正常启动。

三、集成问题汇总

1、npm install --save-dev jest@^27.5.1 执行这个命令时会把node_modules里面的jquery删掉,所以执行完后要启动项目看下是否缺少了jquery依赖,如果缺少,需要再次安装jquery

npm install --save-dev jquery@^3.3.1

2、启动npm run dev时报错信息:Module build failed: Error: Plugin/Preset files are not allowed to export objects, only functions.

报错原因babel-corebabel-loader版本冲突。
解决方案:首先检查项目的babel-corebabel-loader版本号,如果babel-core版本号高于7且babel-loader的版本号高于8,则可按照以下步骤安装jest相关依赖。

如果babel-core版本为6,则需要安装babel-loader的版本也是6,不能高于8,另外安装下面依赖时需注意:

  • jest版本为21、22,推荐:^22.4.0
  • babel-jest为21、22,推荐:^22.4.0

3、启动run test:unit时报错信息:Error: Cannot find module 'jest-transform-stub

报错原因:缺少相应依赖模块。
解决方案:安装相应模块。

4、报错信息:
在这里插入图片描述

报错原因:js文件没有转换
解决方案:修改jest.config.js,在文件中transform中加上!["^.+\\.(js)$": "babel-jest", // 用babel-jest 处理.js](https://img-blog.csdnimg.cn/direct/51f2f1d24d5d4fe7bc9511b6e7b84ebd.png)

5、报错信息:

报错原因babel-corebabel-loaderjestbabel-jest版本冲突。
解决方案:参考问题2,如果babel-core、babel-loader版本大于7则需要安装27以上的jestbabel-jest

6、报错信息: Test suite failed to run TypeError: $export is not a function

报错原因:在报错文件中用到了ES6的语法
解决方案:修改jest.config.js,在文件中transformIgnorePatterns中添加报错文件,忽略转换测试文件,例如:

transformIgnorePatterns: ["node_modules/(?!(.+)/)","node_modules/(?!(core-js)/)"],

或者可以忽略node_modules下面所有文件:transformIgnorePatterns: ["node_modules/"]

7、配置过程可能缺少的模块:babel-plugin-require-context-hook

8、报错信息: SecurityError: localStorage is not available for opaque origins
报错原因jest-unit运行环境未设置。
解决方案:修改jest.config.jsmodule.export中添加

testEnvironment: 'jsdom',
testURL:'http://localhost',

在这里插入图片描述

9、报错信息:

TypeError: Cannot set property $router of #<Vue$3> which has only a getter

      14 |     ]
      15 | })
    > 16 | localVue.prototype.$router =router
      17 | localVue.use(router)
      18 | const wrapper = mount(App,{localVue,router, store,
      19 |     mocks:{
      
      at Object.<anonymous> (tests/unit/src/App.spec.js:16:28)

报错原因:在测试文件中声明变量用了同一个变量名。

在这里插入图片描述

解决方案:修改变量名称:

在这里插入图片描述

10、报错信息:

Failed to collect coverage from ...
ERROR: Cannot read property 'fileCoverage' of undefined
STACK: TypeError: Cannot read property 'fileCoverage' of undefined

报错原因:项目中存在其他单元测试配置,使用了babelistanbul代码覆盖率插件,在.babelrc文件中多了istanbul,导致冲突
解决方案:修改.babelrc文件,去掉istanbul

11、报错信息:

Failed to collect coverage from ...t/funcinit.js: Unexpected token, expected ; (7:25)

报错原因:报错文件中存在语法错误,或者不规范使用,需要自己排查
解决方案:需自己排查。

12、报错信息:

FAIL  tests\unit\src\views\newModel\homePage\todolist\todolist\index.spec.js
  ● Test suite failed to run

    TypeError: _vm.$t is not a function

      1037 |                           aplno: row.aplno || '', // 序号
      1038 |                           recorddate: row.crtdt || '',
    > 1039 |                           customercode: row.customercode
      1040 |                         }
      1041 |                       }
      1042 |                       this.$router.push({
      
      at Proxy.render (src/views/newModel/homePage/todolist/todolist.vue:1039:1887)
      at Object.<anonymous> (tests/unit/src/views/newModel/homePage/todolist/todolist/index.spec.js:16:36)

报错原因:测试文件对应的文件中存在i18n,用于中英文翻译。
解决方案
方案1:在测试文件(断言文件)中添加$t定义。

在这里插入图片描述

方案2:在测试文件(断言文件)中引入i18n,定义i18n

在这里插入图片描述

13、报错信息:require.context is not a function

报错原因:语法不支持ES6
解决方案npm install babel-plugin-require-context-hook@^1.0.0
.babelrc文件plugins节点中添加

plugins: ["npm install babel-plugin-require-context-hook"]

14、报错信息:Unknown custom element:<el-table> - did you........
报错原因elementui组件未注册。
解决方案
方案一:在main.js全局注册

方案二:在jest.setup.js里面全局注册

15、报错信息:document is not function
报错原因:未设置测试环境
解决方案:修改jest.config.jsmodule.export中添加

testEnvironment: 'jsdom',
testURL:'http://localhost',  

在这里插入图片描述

添加完成后如果报缺少模块,可依照提示安装对应模块

16、报警告信息:
在这里插入图片描述

报错原因handlebar版本问题
解决方案npm install handlebar@^4.5.3

17、

Note: If you’ve turned off transpilation of ES6 modules with the option { “modules”: false }, you have to make sure to turn this on in
your test environment.

{
  "presets": [["env", {"modules": false}], "react"],
  "env": {
    "test": {
      "presets": [["env"], "react"]
    }
  }
}

总结:配置过程中可能因为版本的原因某些模块不需要安装,这些可忽略。各个模块最后实现的package.json可能不一致。

配置成功后,启动run test:unit后出现下面截图表示运行成功。项目中会多出来coverage文件夹,该文件夹不需要上传。

在这里插入图片描述

PS:Jest集成成功之后,需要启动项目看是否能启动成功,是否能组包成功!!!

四、拓展阅读

  • 《Vue进阶(八十八)Jest》
  • Jest 官网

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

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

相关文章

【微机原理及接口技术】中断控制器8259A

【微机原理及接口技术】中断控制器8259A 文章目录 【微机原理及接口技术】中断控制器8259A前言一、介绍二、8259A的内部结构和引脚三、8259A的中断工作过程四、8259A的工作方式五、8259A的编程六、外部中断服务程序总结 前言 本篇文章将就8259芯片展开介绍&#xff0c;8259A的…

Chapter10 高级纹理——Shader入门精要学习笔记

Chapter10 高级纹理 一、立方体纹理1.基本概念①组成②采样 2.天空盒子 Sky Box3.环境映射三种方法①特殊布局的纹理创建②手动创建Cubemap——老方法③脚本生成 4.反射5.折射6.菲涅尔反射 二、渲染1.镜子效果2.玻璃效果3.渲染纹理 vs GrabPass 三、程序纹理1.简单程序纹理2.Un…

mov文件怎么转换成mp4格式?这四种转换方法超级好用!

mov文件怎么转换成mp4格式&#xff1f;在数字娱乐的世界中&#xff0c;你是否曾遇到过MOV格式的视频&#xff1f;也许&#xff0c;对于许多人来说&#xff0c;这并不是一个常见的格式&#xff0c;但这并非偶然&#xff0c;首先&#xff0c;我们来谈谈MOV的兼容性问题&#xff0…

读书笔记-《Spring技术内幕》(三)MVC与Web环境

前面我们学习了 Spring 最核心的 IoC 与 AOP 模块&#xff08;读书笔记-《Spring技术内幕》&#xff08;一&#xff09;IoC容器的实现、读书笔记-《Spring技术内幕》&#xff08;二&#xff09;AOP的实现&#xff09;&#xff0c;接下来继续学习 MVC&#xff0c;其同样也是经典…

Linux动态库的制作

Linux操作系统支持的函数库分为&#xff1a; 静态库&#xff0c;libxxx.a&#xff0c;在编译时就将库编译进可执行程序中。 优点&#xff1a;程序的运行环境中不需要外部的函数库。 缺点&#xff1a;可执行程序大 动态库&#xff0c;又称共享库&#xff0c;libxxx.so&#…

Linux之进程控制(下)

目录 进程替换的概念 进程替换的函数 execl​编辑 execlp execle execv execvp execve 上期&#xff0c;我们学习了进程创建&#xff0c;进程终止和进程等待&#xff0c;今天我们要学习的是进程控制中相对重要的板块------进程替换。 进程替换的概念 在进程创建时&…

中国经济昆虫志(55卷)

中国经济昆虫志&#xff0c;共55卷&#xff0c;内容包括概述、形态特征、分类等。各级分类单元均编有检索表&#xff0c;每个种有特征描述、地理分布&#xff0c;有的还记载有生活习性和防治方法。为便于鉴定&#xff0c;绘制有特征图和彩色图。 包括鞘翅目天牛科、半翅目蝽科、…

C - Tile Distance 2

分析&#xff1a;每穿过一行就会加一 先纵向走&#xff0c;再横向走 统一用砖头的左半部分计算 #include<bits/stdc.h> using namespace std; typedef long long ll; int main(){ ll sx,sy,tx,ty;cin>>sx>>sy>>tx>>ty; if((sxsy)%2!0)…

使用CubeIDE调试项目现stm32 no source available for “main() at 0x800337c:

使用CubeIDE调试项目现stm32 no source available for "main() at 0x800337c&#xff1a; 问题描述 使用CubeIDE编译工程代码和下载都没有任何问题&#xff0c;点击Debug调试工程时&#xff0c;出现stm32 no source available for "main() at 0x800337c 原因分析&a…

【C++】#1

关键字&#xff1a; 基本框架、多个main执行、快捷键、cout规则 基本框架&#xff1a; #include <iostream> using namespace std;int main() {//具体内容return 0; } 多个main函数可执行&#xff1a; 常用快捷键&#xff1a; cout规则&#xff1a;

小米MIX Fold 4折叠屏手机背面渲染图曝光

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 7 月 3 日消息&#xff0c;消息源 Evan Blass 今天在 X 平台发布推文&#xff0c;分享了小米 MIX Fold 4 折叠屏手机的高清渲染图&#xff08;图片有加工成分在&#xff0c;最终零售版本可能会存在差异…

Cypress测试:7个快速解决问题的调试技巧!

以下为作者观点&#xff1a; 快速编写代码是一项宝贵的技能&#xff0c;但能够有效调试和解决错误和bug&#xff0c;更是一个软件开发人员具有熟练技能的标志。调试是开发过程中的一个关键环节&#xff0c;可以确保软件按预期运行并满足用户需求。 Cypress 调试简介 Cypress …

可充电纽扣电池ML2032充电电路设计

如图&#xff0c;可充电纽扣电池ML2032充电电路设计。 图中二极管是为了防止电流倒灌&#xff0c; 电阻分压出3.66v&#xff0c;再减掉二极管压降&#xff08;约0.4v)得3.26V&#xff0c;加在电池正负极充电。 随着电池电量的积累&#xff0c;充电电流逐步减小&#xff0c;极限…

Eslint与Prettier搭配使用

目录 前置准备 Eslint配置 Prettier配置 解决冲突 前置准备 首先需要安装对应的插件 然后配置settings.json 点开之后就会进入settings.json文件里&#xff0c;加上这两个配置 // 保存的时候自动格式化 "editor.formatOnSave": true, // 保存的时候使用prettier进…

ctfshow sql注入 web234--web241

web234 $sql "update ctfshow_user set pass {$password} where username {$username};";这里被过滤了&#xff0c;所以我们用\转义使得变为普通字符 $sql "update ctfshow_user set pass \ where username {$username};";那么这里的话 pass\ where…

一文包学会ElasticSearch的大部分应用场合

ElasticSearch 官网下载地址&#xff1a;Download Elasticsearch | Elastic 历史版本下载地址1&#xff1a;Index of elasticsearch-local/7.6.1 历史版本下载地址2&#xff1a;Past Releases of Elastic Stack Software | Elastic ElasticSearch的安装(windows) 安装前所…

深入了解激光粒度分析仪:检测物质粒度分布的利器

在科研、工业生产以及环境监测等多个领域中&#xff0c;精确测量物质粒度分布是确保产品质量、研究准确性和环境安全的重要步骤。 近年来&#xff0c;激光粒度分析仪以其独特的技术优势&#xff0c;在这些领域发挥着越来越重要的作用。 在这篇文章中&#xff0c;佰德将带您了…

人工智能--图像语义分割

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a;专业知识 ​ 文章目录 &#x1f349;引言 &#x1f349;介绍 &#x1f348;工作原理 &#x1f34d;数据准备 &#x1f34d;特征提取 &#x1f34d;像素分…

1.2 ROS2安装

1.2.1 安装ROS2 整体而言&#xff0c;ROS2的安装步骤不算复杂&#xff0c;大致步骤如下&#xff1a; 准备1&#xff1a;设置语言环境&#xff1b;准备2&#xff1a;启动Ubuntu universe存储库&#xff1b;设置软件源&#xff1b;安装ROS2&#xff1b;配置环境。 请注意&…

linux命令行操作

一、看二进制文件 od -t x1 1.txt | less 二、看信号 kill -l man 7 signal 三、查看当前进程的pid号 echo $$