中大型项目必知:jest/vue-test 如何在单元测试中引入第三方插件(例如: $ is not defined)

本文探讨了在单元测试中遇到的全局变量未定义的问题,通过引入jQuery插件来解决。提供了两种解决方案:直接在测试组件中引入插件(不推荐),以及在启动文件中设置全局变量并通过jest配置加载该文件。

前言

我碰到一个问题,我的jq插件配置的全局变量,现在需要测试单个组件,单元测试这个组件的时候里面使用jq的$全局变量,现在测试会报错:$ is not defined,异常如下:
在这里插入图片描述在这里插入图片描述
我看vue-test官网文档里面可以通过localVue引入vuex、vue-router等,但由于jq是全局配置,不知道怎么引入

解决方案

方案一:

一开始我就想到了一种最不适合,但校验结果最快的解决方案,那就是直接在测试组件里面引入需要使用的插件包在这里插入图片描述

但是这样做会导致非常不好的结果:

测试组件引入了额外的第三方依赖包,而且这些依赖包无论是在生产还是测试环境都是冗余的。这也就意味着我们测试完还要手动删除,并且只要每一个测试的组件都依赖了第三方插件,那么我们都要这样做一遍。
毫无疑问,这种是最糟糕的方案,所以我选择毫不犹豫的pass掉

方案二

猜想:由于vue-test是二次封装的jest,所有jest的某些配置在vue-test里面是可以使用的

这种方案是我目前采用的,也是比较适合的一种解决方案,操作步骤如下:

  1. 创建一个setup.js启动文件,内容如下:
    // 其他第三方插件也可以追加到里面
    const jquery = require('jquery')	
    global.$ = jquery
    
  2. jest.config.js配置文件添加如下内容:
    setupFiles: [
        './tests/unit/setup.js'	// setup.js 启动文件的路径
    ]
    

其他方案

由于本人询问过jest相关大佬,并且搜索的资料比较多,也了解了其他的解决方案:比如在单元测试里面添加jest.unmock('jQuery')https://www.it1352.com/1473034.html
这种方案应该是可以,我google了好多都有说过这种方案,但是我的单元测试是用不了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值