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

文章目录

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

一、前言

在前期博文《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 getter14 |     ]15 | })> 16 | localVue.prototype.$router =router17 | 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 runTypeError: _vm.$t is not a function1037 |                           aplno: row.aplno || '', // 序号1038 |                           recorddate: row.crtdt || '',> 1039 |                           customercode: row.customercode1040 |                         }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 官网
  • babel

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

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

相关文章

基于Java的网上花店系统

目 录 1 网上花店商品销售网站概述 1.1 课题简介 1.2 设计目的 1.3 系统开发所采用的技术 1.4 系统功能模块 2 数据库设计 2.1 建立的数据库名称 2.2 所使用的表 3 网上花店商品销售网站设计与实现 1. 用户注册模块 2. 用户登录模块 3. 鲜花列表模块 4. 用户购物车…

【ARMv8/v9 GIC 系列 1.5 -- Enabling the distribution of interrupts】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 Enabling the distribution of interruptsGIC Distributor 中断组分发控制CPU Interface 中断组分发控制Physical LPIs 的启用Summary Enabling the distribution of interrupts 在ARM GICv3和GICv4体系结构中&#xff0c;中断分发…

Windows上Docker的安装与初体验

Docker Desktop下载地址 国内下载地址 一、基本使用 1. 运行官方体验镜像 docker run -d -p 80:80 docker/getting-started执行成功 停止体验服务 docker stop docker/getting-started删除体验镜像 docker rmi docker/getting-started2. 修改docker镜像的存储位置 3. …

【初中数学选讲】二次根式练习题(20240706-01)

初中数学选讲&#xff1a;二次根式练习题&#xff08;20240706-01&#xff09; 1. 练习题目1.1 题目描述1.2 思路 2. 答题2.1 分析通项2.2 求通项的和 鸣谢 1. 练习题目 辅导初中学生数学的过程中&#xff0c;发现一道有意思的题目&#xff0c;分享如下。 1.1 题目描述 计算…

[Vite]vite-plugin-react和vite-plugin-react-swc插件原理了解

[Vite]vite-plugin-react和vite-plugin-react-swc插件原理了解 共同的作用 JSX 支持&#xff1a;插件为 React 应用程序中的 JSX 语法提供支持&#xff0c;确保它可以被正确地转换为 JavaScript。Fast Refresh&#xff1a;提供热更新功能&#xff0c;当应用程序在开发服务器上…

「深度解析」ChatGPT2:无监督多任务学习的语言模型(2019)

论文总结 以下是我阅读完整篇论文做的个人总结&#xff0c;包含了ChatGPT-2文章的主要内容&#xff0c;可以仅看【论文总结】章节。 数据集 自制了一个网页爬虫&#xff0c;被抓取的网页部分来自于社交平台&#xff0c;这些网页由人工进行过滤。最终生成 WebText数据集 &…

Django开发实战(1)- 认识django

1.django 使用MTV模式&#xff0c;其实与MVC本质一样&#xff1a; model&#xff1a;业务对象和关系映射&#xff08;ORM&#xff09; template&#xff1a;客户端页面展示 view&#xff1a;业务逻辑&#xff0c;根据需求调用 2.开发相关 √ python √ html&…

简单的手动实现spring中的自动装配案例

简简单单的实现一个spring中的自动装配和容器管理的小骚操作。 1&#xff0c;创建AutoSetBean.java 使用injectBeans静态方法&#xff0c;可以扫描指定包下的所有带MyInject注解的字段&#xff0c;如果在beans的Map中存在这个字段的实例化类&#xff0c;则执行装配。 import…

无人机企业需要什么资质?

无人机企业所需的资质主要可以分为几大类&#xff0c;以确保其合法、安全、高效地进行相关业务活动。以下是对这些资质的详细解释和归纳&#xff1a; 1. 基础企业资质&#xff1a; - 工商营业执照&#xff1a;这是企业合法经营的基本证书&#xff0c;所有企业都需要取得。无人…

软连接迁移 Docker 的默认安装(存储)目录

前言 经常我们会拿到一些别人装好的服务器&#xff0c;需要在这些系统上启动我们的docker服务。 但是这些“专业人员”呢&#xff0c;有时候就会有非常不专业的操作&#xff0c;比如他把根目录/只划分50GB&#xff0c;/home却有51TB。这个时候就会导致我们的服务器还有很多空间…

9 redis,memcached,nginx网络组件

课程目标: 1.网络模块要处理哪些事情 2.reactor是怎么处理这些事情的 3.reactor怎么封装 4.网络模块与业务逻辑的关系 5.怎么优化reactor? io函数 函数调用 都有两个作用:io检测 是否就绪 io操作 1. int clientfd = accept(listenfd, &addr, &len); 检测 全连接队列…

基于工业互联网的智慧矿山解决方案PPT(38页)

文章摘要 工业互联网与智慧矿山 基于工业互联网的新一代智慧矿山解决方案&#xff0c;将互联网和新一代IT技术与工业系统深度融合&#xff0c;形成关键的产业和应用生态&#xff0c;推动工业智能化发展。该方案以“四级、三层、两网、一平台”为总体框架&#xff0c;强调应用目…

刷代码随想录有感(127):动态规划——判断是否为子序列

题干&#xff1a; 代码&#xff1a; class Solution { public:bool isSubsequence(string s, string t) {vector<vector<int>>dp(s.size() 1, vector<int>(t.size() 1, 0));for(int i 1; i < s.size(); i){for(int j 1; j < t.size(); j){if(s[i …

Perl 语言开发(六):深入探索 Perl 中的数组与列表操作

目录 1. 数组和列表的基本概念 1.1 数组的定义与特点 1.2 列表的定义与特点 2. 数组的基本操作 2.1 访问数组元素 2.2 数组的长度 2.3 添加和删除元素 2.4 切片操作 2.5 迭代数组 3. 列表的常见操作 3.1 创建和使用列表 3.2 列表的上下文 3.3 列表和数组的转换 3…

【人工智能】-- 智能机器人

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;引言 &#x1f349;机器人介绍 &#x1f348;机器人硬件 &#x1f34d;机械结构 &#x1f34d;传感器 &#x1f34d;控…

【MySQL】简单的CURD操作

【MySQL】简单的CURD操作 前言 ​ 今天我们要一起学习的是MySQL中简单的CURD操作&#xff0c;Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09;。 正文 Create创建 创建数据的基本方式insert语法&#xff1a; INSER…

Linux查看文件的行数,字数,字节数

介绍 在Linux系统中这统计非常方便&#xff0c;只需要简单的几个命令就可以搞定&#xff0c;这个命令就是 wc。 wc --help 用法&#xff1a;wc [选项]... [文件]...或&#xff1a;wc [选项]... --files0-fromF 输出每个指定文件的行数、单词计数和字节数&#xff0c;如果指定…

One day for Chinese families

周围生活中的普通家庭的一天流程&#xff1a; 【上班的一天】 【放假的一天】 有家庭的人&#xff0c;上班流程&#xff1a; 01&#xff09;准备早餐&#xff0c;牛奶&#xff0c;面包 02&#xff09;叫娃娃起床&#xff0c;一般要蛮久的&#xff1b;沟通交流 -- 哄娃娃 -- 生气…

【TB作品】基于ATmega48的开机登录程序设计

使用Proteus仿真软件设计一个开机登录程序,单片机选用ATmegga48. 基础要求: 1.程序启动后在LCD1602液晶屏上提示用户通过独立按键输入密码(6位)。 2.密码输入错误则在屏幕上提示密码错误,密码输入正确则在屏幕上提示密 码正确后等待约3秒后进入主界面,在屏幕中央显示HelloWorld…

windows下编译ffmpeg 最详细教程

1 Ffmpeg下载地址&#xff1a;FFmpeg 使用命令下载 git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 下载完成后会发现如下目录&#xff1a; 2 msys2下载地址&#xff1a;MSYS2 解压好后&#xff0c;选择一个非空路径安装&#xff0c;安装好后路径如下&#xff1a; 为…