vue-test-utils官网:https://vue-test-utils.vuejs.org/zh/
jest官网:https://jestjs.io
依赖包
请安装它们"htmlcode">
yarn add @vue/test-utils vue-jest yarn jestjest-serializer-vue yarn add babel-jest babel-core@^7.0.0-bridge.0
"color: #ff0000">配置
jest配置:告诉jest它需要哪些额外的配置
jest相关的配置可以配置在package.json中或者单独的jest.config.json文件中:
// jest.config.json { "moduleFileExtensions": [ "js", "json", "vue" ], "transform": { "^.+\\.js$": "<rootDir>/node_modules/babel-jest", // jest使用babel解析js ".*\\.(vue)$": "<rootDir>/node_modules/vue-jest" // jest对vue单文件的解析 }, "snapshotSerializers": [ "<rootDir>/node_modules/jest-serializer-vue" ], "moduleNameMapper": { "^@/(.*)$": "<rootDir>/src/$1", //为了解析webpack配置的alias字段 "^tim-architect/(.*)$": "<rootDir>/tim-architect/$1" }, "transformIgnorePatterns": [ "node_modules/(" ] }
"node_modules"],表示所有的node_modules下的包都不需要babel解析。但是一些3rd库提供的文件仍然是未编译的es6语法,jest在解析时会报语法错误。因此需要指定白名单,需要那些node_modules下的包被babel转换。
babel配置:告诉babel你需要用哪些工具去处理一坨("htmlcode">
{ ..., env: { test: { presets: [[ '@babel/env', { modules: 'auto', // 现在不能通过webpack来解析s6 module,需要使用babel来解析,所以要开启 targets: { node: 'current' // 指定环境为当前node版本,减少解析不识别语法的范围 } } ]], plugins: [[ '@babel/plugin-transform-runtime', { corejs: 2, useESModules: false // 不允许使用es modules,babel需要通过@babel/plugin-transform-modules-commonjs将es module转换为commonjs模块解析 } ] ] } } }
"color: #ff0000">遇到的问题总结
1.异步生命周期
vue-test-utils提供了对异步请求方法的mock,文档如下:https://vue-test-utils.vuejs.org/zh/guides/testing-async-components.html
但是对于生命周期函数是异步的情况要怎么处理呢?以下是亲测有效但是有点麻烦的姿势:
// 假设在异步生命周期方法中,调用的函数是init,那我们就通过jest.fn()提供的方法进行mock init.default = jest.fn().mockImplementation(() => Promise.resolve(yourValue)) // 在Jest提供的全局方法中,调用异步生命周期的方法,以保证每个断言都是在生命周期之后 beforeEach(async () => { init.default.mockClear() await wrapper.vm.$mount() // 异步生命周期里会调用init方法 })
2.如果测试文件中包含require.context,请看这一条 :
这时候没有webpack怎么办?当然是用别人踩过坑的方法救急!
说实话,如果组件引用了这种东西,我觉得它不够纯洁,还是不要管它好了╮( ̄⊿ ̄")╭,放它走吧。
但是为什么要解决这个问题呢?想到以后可能还要测试js文件,我们的标准也有可能是覆盖代码行数的测试,所以,还是解决一下吧。
其实思路很简单,我们需要在全局重写require.context,babel再遇到require.context就不会报错了。
// 别怕,不需要你手动写,有人已经写了个插件了:babel-plugin-require-context-hook // 在babel.config.js的env.test中加上这个插件 ... plugins: [..., 'require-context-hook'] ... // 在jest.config.json中配置一下setupFiles // setupFiles表示在每个运行文件前添加的额外配置 ... "setupFiles": ["<rootDir>/.jest/register-context.js"], ... // 创建.jest/register-context.js文件,引入时进行全局的注册 import registerRequireContextHook from 'babel-plugin-require-context-hook/register'; registerRequireContextHook();
3.测试过程总是报synax error ,诸如import无法解析这类es6语法引起的错误
小兄弟,只能说好好检查一下你的babel是否配置正确,并且安装了适合的babel-core版本。出现这个问题的时候,说明babel并没有解析es6语法,顺藤摸瓜,
(确保依赖包的安装源相同,建议用yarn)
- if 是node_modules里的文件导致的,通过配置transformIgnorePatterns告诉babel需要它解析的模块;
- else if 是项目的文件导致的,那就查看下自己的babel.config.js(确保不是.babelrc文件)是否配置正确,如果使用了@babel/preset-env,请注意module参数的配置;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
vue-test-utils
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]