jest单元测试,

  jest单元测试,

  目前测试是大型应用开发中非常重要的环节,在Vue项目中可以使用Jest进行单元测试。本文主要介绍Vue-Jest的自动化测试,有兴趣的可以看看。

  

目录

  安装和配置中的常见错误。测试前的工作处理依赖于生成实例和DOM摘要引用。目前测试是大型应用开发中非常重要的环节,在Vue项目中可以使用Jest进行单元测试。Jest是facebook推出的测试框架,集成了Mocha、chai、jsdom、sinon等功能。而且在Vue的脚手架中已经集成了Jest,所以在Vue项目中使用Jest进行单元测试是唯一的选择。从提供的示例来看,很容易成功配置和测试。然而,在实际项目中有许多差异,我在测试我自己的一个业务组件时报告了许多错误。本文将总结我的踩坑经验,帮助读者快速解决配置方面的问题。

  

安装

  可以通过官方@vue/cli直接创建Vue项目,然后选择单元测试这个选项。

  ?检查项目所需的功能:

  选择Vue版本

  巴贝尔

  打字稿

  渐进式Web应用程序(PWA)支持

  路由器

  沃克斯

   CSS预处理程序

  棉绒/格式器

  单元测试

   E2E测试

  然后在测试框架中选择Jest。

  ?选择一个单元测试解决方案:Jest

  ?你更喜欢把Babel,ESLint等的配置放在哪里?在专用con中

  fig文件

  Vuts的项目最后生成的jest.config.js配置文件太长了,好像在告诉我们,我已经给你全部设置好了,直接用吧。但是对于项目,还是需要手动配置兼容性,否则会报错很多,无法进行。

  模块.导出={

  预设: @ vue/CLI-plugin-unit-jest/presets/typescript-and-babel

  }

  

配置

  先看看这个预置配置里写的是什么,找到包@ vue/CLI-plugin-unit-jest/presets/typescript-and-babel。实际上,该输出的配置如下:

  模块.导出={

  ModuleFileExtensions: [//测试的文件类型

  js ,

  jsx ,

   json ,

  //告诉Jest来处理*。vue文件

  vue ,

  ts ,

  tsx

  ],

  转换:{//转换模式

  //进程*。使用vue-jest的vue文件。\\.vue $ :require . resolve( vue-jest )。\\.(CSS styl less sass scss SVG png jpg TTF woff woff 2)$ :

  require . resolve( jest-transform-stub )。\\.jsx?$: require.resolve(babel-jest )。\\.tsx?$: require.resolve(ts-jest ),

  },

  转换模式:[/node_modules/],//在转换过程中忽略node_modules。

  //支持源代码中相同的@ - src别名映射

  ModuleNameMapper: {//@符号表示当前项目下的src。

  ^@/(.*)$: rootDir/src/$1

  },

  测试环境: jest-environment-jsdom-fifth ,

  //快照的序列化程序

  snapshotserializer:[//快照的配置

  jest-serializer-vue

  ],

  测试:[//默认测试文件

  **/tests/unit/**/*.spec.[jt]s?(x),

  * */_ _测试__/*。[jt]s? x

  ],

  //https://github.com/facebook/jest/issues/6766

  testURL:“http://localhost/”,

  watchPlugins: [

  require . resolve( jest-watch-type ahead/filename ),

  require . resolve( jest-watch-type ahead/testname )

  ],

  全局:{

   ts-jest :

  babelConfig:对

  }

  }

  }

  其中,比较重要的配置也是我们用来解决问题的配置:

  ModuleFileExtensions:要测试的文件类型。这里的默认配置基本涵盖了文件类型,所以这里一般不需要更改。

  Transform:转换方法,匹配的文件只有翻译后才能识别,否则报错。

  TransformIgnorePatterns:转换忽略配置

  ModuleNameMapper:模块别名,如果有的话,应该填写。

  

常见错误

  语法错误:语法错误,可能是因为没有转换,比如下面的提示:

  /用户/庄冰。Cai/Documents/workspace/projects/WMS-ui/node _ modules/vue-runtime-helpers/dist/normalize-component。乔丹:76

  导出默认标准化组件

  ^^^^^^

  语法错误:意外的标记"导出"

  由于我们没有对。全方位高压喷射工法文件进行转换导致了报错,最快的解决方式就是在改变补充。全方位高压喷射工法的转化

  转换:{。\\.mjs$ :巴别-笑话

  }

  只需要在对。全方位高压喷射工法的文件,提供转化方式即可。

  另一种语法错误,是节点模块内的某些文件需要转化,然而被transformIgnorePatterns配置忽略了。

  你可以这样做:

  要转换一些"节点模块"文件,可以在配置中指定一个自定义的transformIgnorePatterns .

  如果需要自定义转换,请在配置中指定"转换"选项。

  如果你只是想模仿你的非射流研究…模块(例如二进制资产),你可以用" moduleNameMapper "配置选项把它们剔除。

  您可以在文档中找到这些配置选项的更多详细信息和示例:

  https://jestjs.io/docs/en/configuration.html

  详细信息:

  /用户/庄冰。Cai/Documents/workspace/projects/WMS-ui/node _ modules/vue-runtime-helpers/dist/normalize-component。乔丹:76

  导出默认标准化组件

  ^^^^^^

  语法错误:意外的标记"导出"

  图中vue-运行时-助手被用到了,然而因为transformIgnorePatterns的配置忽略了转化,从而导致语法错误。解决方法就是改变transformIgnorePatterns的配置,如下:

  transformIgnorePatterns: [

  //转化时忽略节点模块,但不包括vue-运行时-助手

  /node _模块/(?(vue-runtime-helpers)/),

  ],

  将vue-运行时-助手排除后,转化的时候就不会忽略它,从而解决语法报错的问题。

  分时(同分时)类型错误

  以打字打的文件诊断(使用`[ jest-config]。全局。ts-jest。诊断学选项自定义):

  src/views/inventory-map/_ _ tests _ _/available。规格。ts:15:1-错误TS2304:找不到名称“每个人之前”.

  15 beforeEach(()={

  ~~~~~~~~~~

  src/views/inventory-map/_ _ tests _ _/available。规格。ts:19:1-错误TS2593:找不到名称描述一下.您需要为测试运行程序安装类型定义吗?请尝试使用" npm i @types/jest "或" npm i @types/mocha ",然后将“玩笑”或“摩卡”添加到tsconfig的类型字段中。

  19描述(可用-库存-地图,()={

  ~~~~~~~~

  src/views/inventory-map/_ _ tests _ _/available。规格。ts:20:3-错误TS2593:找不到名称它.您需要为测试运行程序安装类型定义吗?请尝试使用" npm i @types/jest "或" npm i @types/mocha ",然后将“玩笑”或“摩卡”添加到tsconfig的类型字段中。

  根据提示需要在tscofig.json中添加

  {

  编译器选项:{

  类型:[

  webpack-env ,

  "玩笑"

  ],

  }

  }

  

测试前的工作

  在编写测试用例前,我们需要玩笑提供组件实例伏特计和渲染的数字正射影像图结构。对代码逻辑、页面效果的双重测试保障,那么如何获取到这个业务组件?

  直接引用组件是不行的,因为你的业务组件需要的依赖很多,比如用户界面组件库、工具函数、Vuex的状态等,所以首先我们需要处理好这些依赖。

  

处理依赖

  首先要知道要测试的这个业务组件依赖了哪些东西,全局的依赖可以参照主页面或主页。射流研究…入口文件处,其他可根据组件中的引用来判断。有了依赖后如何在玩笑中获得组件实例?

  某视频剪辑软件提供了一个单元测试实用工具库- Vue测试工具,编写测试用例的时候可以用到它,首先利用createLocalVue创建一个某视频剪辑软件的类供你添加组件、混入和安装插件而不会污染全局的某视频剪辑软件类,接着将依赖引用进去。

  const _ local vue=创建本地vue();

  _本地vue。使用(Vuex);

  _本地vue。使用(UI);

  _本地vue。使用(i18n安装);

  _localVue.component(s-filter ,s filter);

  _localVue.component(w-table ,WTable);

  _localVue.directive(xxx ,{

  已插入:(el,binding)={

  .

  },

  });

  export const localVue=_ localVue

  这样我们得到一个包含依赖关系的Vue类,然后处理Vuex。例如,我们需要枚举值。

  从导入枚举。/enums ;

  export const systemStore=new Vuex。商店({

  动作:{},

  状态:{

  枚举:{

  系统枚举:枚举,

  },

  },

  });

  

生成实例和 DOM

  在获得localVue并存储之后,我们将使用它来生成结果,并通过mount呈现组件。

  从“@/utils/unit-test/common”导入{ localVue,system store };

  从“@vue/test-utils”导入{ mount };

  要求(交集-观察者);//兼容的jsdom不支持IntersectionObserver

  从导入任务列表./available-inventory-map/index . vue ;//引用要测试的业务

  let store:任意;

  beforeEach(()={

  store=systemStore

  });

  描述(可用-库存-地图,()={

  It(过滤测试,()={

  const renderer=create renderer();

  const wrapper=mount(任务列表,{

  localVue,

  店,

  attachToDocument: true,

  });

  const html=wrapper . html();//获取完整的html结构

  const vm=wrapper.vm//组件实例

  console.log(html,VM);

  })

  }

  实例及其DOM结构最终通过挂载localVue获得并存储。接下来,您可以根据示例和DOM编写自己的测试用例。

  

总结

  主要介绍在Vue Ts项目中配置Jest自动化测试所遇到问题的总结,介绍基本配置和常见错误的解决方法,以及如何在编写测试用例之前获取完整的组件信息和DOM。为接下来的用例编写打下基础。

  

引用

  Vue测试工具

  这就是这篇关于Vue-Jest自动化测试的详细配置的文章。更多相关的Vue-Jest自动化测试内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: