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. …

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 …

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

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

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; 为…

自己动手实现语音识别

声音的本质是震动,震动的本质是位移关于时间的函数,波形文件(.wav)中记录了不同采样时刻的位移。 通过傅里叶变换,可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布,建立音频内容和文本的对应关系,以此作为模型训练的基础。 语音mfc…

ROS——坐标系管理、监听与广播、常用可视化工具

坐标系管理 TF功能包 小海龟追踪实验 ros版本(20.04)的tf安装命令: sudo apt-get install ros-noetic-turtle-tf 解决因python版本出现的无法生成跟随海龟&#xff1a; sudo ln -s /usr/bin/python3 /usr/bin/python ( -s 软链接,符号链接) ln命令&#xff08;英文全拼&#…

grpc-go服务端接口添加

【1】新建一个目录whgserviceproto&#xff0c;目录下新建一个proto包&#xff1a;whgserviceproto.proto &#xff08;注意目录和包名称保持一致&#xff09; //协议为proto3 syntax "proto3"; // 指定生成的Go代码在你项目中的导入路径 option go_package"…

代理模式详解、RESTFul风格、Spring IOC

Day49 代理模式proxy 概念&#xff1a; 代理(Proxy)是一种设计模式&#xff0c;提供了对目标对象另外的访问方式&#xff0c;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 代理模式分为静态代理和动态代理…

开源数据科学平台Anaconda简介

开源数据科学平台Anaconda简介 零、时光宝盒 最近&#xff0c;某金融行业女性选择以跳楼的形式结束自己的生命&#xff0c;这件不幸的事情成了热门话题&#xff0c;各种猜测的都有&#xff0c;有些人评论的话真的很过分。我想起前段时间看到的&#xff0c;有个女学生跳江&#…

【论文解读】AGENTLESS:揭开基于LLM的软件工程代理的神秘面纱,重塑软件工程自动化新基线

&#x1f4dc; 文献卡 英文题目: Agentless: Demystifying LLM-based Software Engineering Agents;作者: Chunqiu Steven Xia; Yinlin Deng; Soren Dunn; Lingming ZhangDOI: 10.48550/arXiv.2407.01489摘要翻译: 大型语言模型&#xff08;LLM&#xff09;的最新进展显著推进…