iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue单元测试的示例分析
  • 554
分享到

vue单元测试的示例分析

2023-06-14 13:06:26 554人浏览 独家记忆
摘要

小编给大家分享一下Vue单元测试的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!为什么要引进单元测试?现今时代,各种编程语言,开发框架,集成工具蓬勃发展,然而软件工程师们却仍然挣扎在第一线,被bug、遗留代码、技术

小编给大家分享一下Vue单元测试的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

为什么要引进单元测试?

现今时代,各种编程语言开发框架,集成工具蓬勃发展,然而软件工程师们却仍然挣扎在第一线,被bug、遗留代码、技术债务、重构搞得焦头烂额,当你的项目足够大的时候,在叠加模块和组件的过程中,是很有可能影响之前的模块。但是被影响的模块已经通过了测试,我们在迭代的时候,很少有测试人员会去重新测试这个系统。所以, 被影响的模块很可能就有了一个隐形的bug被部署到线上。因此我们采用自动化测试。最主要的作用是对于大型项目,在每次迭代的时候, 可以保证整个系统的正确运行, 确保系统的健壮,总结以下几点:

  • 自动化的测试,节省时间

  • 减少低级的bug

  • 提供了对组件行为描述的文档

  • 能在编写单测中改进代码

  • 利于阅读组件,促进重构

  • 证明你的工作已完成

  • 利于代码评审

  • 代码性能

  • 提供一些度量指标

单元测试概述

单元测试通常是针对应用程序中最小的部分,在vue中组件是要测试的单元(后面介绍)

首先,我们来开始一个简单的单元测试,在代码中,使用sum函数计算两数之和。

单元测试是在源代码中单独调用函数并断言其行为正确的函数,看看如下的例子,这是一个比较简单的程序,导出一个sum函数,然后运行该函数,断言其如果不返回则抛出错误。

// sum.jsexport default function sum(a,b){    return a + b}// sum.spec.jsimport sum from './sum.js'function testSum(){    if(sum(1,2)!==3){        throw new Error('sum(1,2) not return 3')    }}testSum()

因为单元测试是针对隔离的单元进行测试的,所以当编写出良好的单元测试,能准确的将代码问题暴露出来。

另外在测试中,我们可能会关注快照测试,快照测试类似于差异发现,快照测试将运行的程序进行截图比较,如果存在差异,则会显示错误,在vue测试中,vueTestUtil提供了类似的能力,可以比较js中可序列化的值,在组件中就是比较dom输出

测试开发的模式

如果你关注测试开发方面的知识,你应该听说过测试驱动开发(TDD - Test Driven Development)以及行为驱动开发(BDD - Behavior Driven Development)

1. 测试驱动开发(TDD - Test Driven Development)

测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程

首先,开发人员在编写业务逻辑之前,先编写一些测试用例 如果运行这些测试用例,会得到失败的结果,因为我们根本没有实现要测试的业务逻辑 实现这些业务逻辑 运行测试用例,查看通过率,如果你是一个优秀的开发者,可能这些用例都可以通过 修复测试用例,或者重构

当我们开发新功能时,依然是重复上述步骤,核心就是测试用例前置,流程图如下:

vue单元测试的示例分析

举个栗子: 我们通过具体的实例来描述一下TDD,假设我们现在的需求是实现一个阶乘函数,我们使用jest来实现这个测试用例

var fac = require("../src/index.js");test("输入负数,应该返回NaN ", () => {  expect(fac(-1)).toBe(NaN);});test("输入0,应该返回1 ", () => {  expect(fac(0)).toBe(1);});test("输入1,应该返回1 ", () => {  expect(fac(1)).toBe(1);});test("输入2,应该返回2", () => {  expect(fac(2)).toBe(2);});test("输入3,应该返回6", () => {  expect(fac(3)).toBe(6);});

运行这个测试用例,肯定会失败,因为我们还没有实现这个fac函数,接下来我们来实现这个阶乘函数

module.exports = function fac(n) {  if (n < 0) return NaN;  if (n === 0) return 1;  return n * fac(n - 1);};

现在我们再次运行这个测试用例,得到如下结果:

vue单元测试的示例分析

可以看到,所有的case都通过了,这个就是TDD的开发模式

2. 行为驱动开发(BDD - Behavior Driven Development)

在传统软件开发中,业务人员拿到需求,将需求交给需求分析人员,需求分析人员编写需求说明书或者设计,然后软件开发人员根据需求说明进行架构设计和代码开发,接着测试人员根据需求说明编写测试用例进行测试,从需求产生到测试交付,有多个不同角色的参与,期间很容易产生信息丢失与理解偏差,其中只要出现一个环节错误,研发团队就很难交付合格的产品。

BDD是一种敏捷软件开发的技术,它鼓励软件中的开发者、QA和非技术人员或商业参与者之间的协作,特别适用于敏捷项目

vue单元测试的示例分析

举个栗子描述一下:

var fac = require("../src/index.js");describe("验证阶乘函数 fac:", function () {  it("输入负数,应该返回NaN ", () => {    expect(fac(-1)).toBe(NaN);  });  it("输入0,应该返回1 ", () => {    expect(fac(0)).toBe(1);  });  it("输入1,应该返回1 ", () => {    expect(fac(1)).toBe(1);  });  it("输入2,应该返回2", () => {    expect(fac(2)).toBe(2);  });  it("输入3,应该返回6", () => {    expect(fac(3)).toBe(6);  });});

运行测试用例,得到结果:

vue单元测试的示例分析

对比代码内容与测试结果,发现差别并不大,最主要的区别就是措辞的区别,BDD的测试用例看起来就像是在看一篇文档一样,结构十分清晰,对于团队配合,代码阅读,促进重构有着不可小觑的作用,当你可以流畅的阅读测试用例的时候,自然也能编写出更好的代码。

这里的例子只是描述与测试驱动开发的差别,并不能代表真正的行为驱动开发,行为驱动开发更像是一种概念理论

总结:BDD更加注重功能的而不只是关注结果,另外借用一句业内名言:BDD帮助开发人员设计(design)软件,TDD帮助开发人员测试(test)软件。

Vue中的单元测试

单元测试允许你将独立单元的代码进行隔离测试,其目的是为开发者提供对代码的信 心。通过编写细致且有意义的测试,你能够有信心在构建新特性或重构已有代码的同时,保持应用的功能和稳定。 为一个 Vue 应用做单元测试并没有和为其它类型的应用做测试有什么明显的区别。

框架选择

如果你是Vue的开发者,你应该十分了解vue的组件中template的写法,template、style、script模板式的语法,相对于React中Jsx语法更加直接和自然,Vue中将组件作为最小测试单元十分合适。

虽说单元测试通常与框架并没有直接关系,但是对于功能集合、性能和对单文件组件预编译的支持、单测产生价值以及开发过程的便捷性你需要对其进行评估。

一流的错误报告

当测试失败时,提供有用的错误信息对于单元测试框架来说至关重要。这是断言库应尽的职责。一个具有高质量错误信息的断言能够最小化调试问题所需的时间。除了简单地告诉你什么测试失败了,断言库还应额外提供上下文以及测试失败的原因,例如预期结果 vs. 实际得到的结果。 一些诸如 Jest 这样的单元测试框架会包含断言库。另一些诸如 Mocha 需要你单独安装断言库 (通常会用 Chai)。

活跃的社区和团队

因为主流的单元测试框架都是开源的,所以对于一些旨在长期维护其测试且确保项目本身保持活跃的团队来说,拥有一个活跃的社区是至关重要的。额外的好处是,在任何时候遇到问题时,一个活跃的社区会为你提供更多的支持。

这里我们综合考虑使用Jest框架,Jest 是一个专注于简易性的 javascript 测试框架。一个其独特的功能是可以为测试生成快照 (snapshot),以提供另一种验证应用单元的方法。

Jest 是功能最全的测试运行器。它所需的配置是最少的,默认安装了 JSDOM,内置断言且命令行的用户体验非常好。

Jest资料

Jest 官网

Vue CLI 官方插件 - Jest

Vue官方提供了十分便捷的测试工具库:Vue Test Utils,接下来会讲解如何使用 Vue Test Utils 对vue的组件进行单元测试。

Vue Test Utils

它提供了丰富的api,拥有渲染组件实例,选择器、模拟插入全局组件、模拟状态、数据流、生命周期、事件等强大的功能,甚至可以模拟路由等,接下来我们来尝试一下。

安装:

安装Vue Test Utils的方式并不难,我们先选择一个测试运行器,可以选择 Jest或者Mocha,这里我们选择Jest。

如果您还没有使用Vue-cli创建项目,可以在vue-cli创建项目时选择Jest,框架会自动安装Vue Test Utils,运行:

 vue create vue-test

如果您已经有通过Vue-cli创建的项目,则可以运行:

vue add @vue/unit-jest

配置Jest: jest的配置可以放到根目录的jest.config.js 或者 jest.config.JSON里面

module.exports = {  preset: "@vue/cli-plugin-unit-jest", // 单测插件  moduleFileExtensions: ["js", "json", "vue", "less", "CSS"], // 后缀  transfORM: { // 模块解析    "^.+\\.js$": "<rootDir>/node_modules/babel-jest",    ".*\\.(vue)$": "<rootDir>/node_modules/vue-jest",  },  moduleNameMapper: { // 别名识别    "^@/(.*)$": "<rootDir>/src/$1",    "\\.(css|less)$": "<rootDir>/tests/mocks/styleMock.js",  },  // 快照解析 需要安装 jest-serializer-vue  snapshotSerializers: ["<rootDir>/node_modules/jest-serializer-vue"],  collectCoverage: true,  // 覆盖率目录  coverageDirectory: "report/coverage",  // 单测报告配置,需要安装jest-html-reporter  reporters: [    "default",    [      "./node_modules/jest-html-reporter",      {        loGo: "https://rdc-test.mingyuanyun.com/static/img/rdc.png",        pageTitle: "单测报告(工作台)",        outputPath: "report/unit-test/index.html",        includeFailureMsg: true,      },    ],  ],};

需要安装的模块:

  • jest-serializer-vue(序列化工具)

  • jest-html-reporter(单测报告工具,也可以选择其他工具)

配置完成后,我们就可以愉快地运行单测啦

如下所示,这是一个十分简单的点击数字自增的组件:

// Increment.js<template>  <div>    <p>number is {{ count }}</p>    <button @click="increment">increment</button>  </div></template><script>export default {  data() {    return {      count: 0,    };  },  methods: {    increment() {      this.count++;    },  },};</script><style scoped lang="less">p {  font-size: 2em;  text-align: center;}</style>

Vue Test Utils提供了实现包裹器的方法,mount,shallowMount,获取包裹器后,我们可以开始使用其实例上封装的众多接口

// increment.spec.js// 导入测试工具集import { mount } from "@vue/test-utils";import Increment from "@/views/Increment";describe("Increment", () => {  // 挂载组件,获取包裹器  const wrapper = mount(Increment);  const vm = wrapper.vm;  it("render markup", () => {    expect(wrapper.html()).toContain("<p>number is 0</p>");  });  // 模拟用户点击  it("button click should increment the count", () => {    expect(vm.count).toBe(0);    const button = wrapper.find("button");    button.trigger("click");    expect(vm.count).toBe(1);  });  // 点击后查看dom  it("button click should increment the count and update the dom", async () => {    expect(wrapper.text()).toContain("1");    const button = wrapper.find("button");    await button.trigger("click");    expect(wrapper.text()).toContain("2");  });});

写好单元测试后,我们来执行一下:

npm run test:unit

运行完成后,在我们项目根目录,可以查看到单测报告 report/unit-test/index.html ,在浏览器打开,就可以查看

vue单元测试的示例分析

打开coverage/lcov-report/index.html可以查看覆盖率

vue单元测试的示例分析

好了,我们现在已经完成一个简单的单元测试用例了,我们使用了挂载、包裹器、选择器,事件触发器等,具体还有很多的API可以查看官方文档

看完了这篇文章,相信你对“vue单元测试的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: vue单元测试的示例分析

本文链接: https://www.lsjlt.com/news/271191.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue单元测试的示例分析
    小编给大家分享一下vue单元测试的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!为什么要引进单元测试?现今时代,各种编程语言,开发框架,集成工具蓬勃发展,然而软件工程师们却仍然挣扎在第一线,被bug、遗留代码、技术...
    99+
    2023-06-14
  • Vue组件单元测试的示例分析
    这篇文章将为大家详细讲解有关Vue组件单元测试的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。关于 Vue 组件单元测试最常见的问题就是“我究竟应该测试什么?”虽...
    99+
    2024-04-02
  • Angular中单元测试的示例分析
    这篇文章给大家分享的是有关Angular中单元测试的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。第一个测试用例当创建Angular应用后,在package.json文件...
    99+
    2024-04-02
  • Go语言单元测试的示例分析
    小编给大家分享一下Go语言单元测试的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、单元测试分类及其概念1.基本分类测试函数 函数前缀为Test 主要用...
    99+
    2023-06-29
  • 基于SpringBoot Mock单元测试的示例分析
    小编给大家分享一下基于SpringBoot Mock单元测试的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Junit中的基本注解:@Test:使用该注解标注的public void方法会表示为一个测试方...
    99+
    2023-06-25
  • Go语言单元测试与性能测试示例分析
    这篇文章主要讲解了“Go语言单元测试与性能测试示例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言单元测试与性能测试示例分析”吧!概述测试不是Go语言独有的,其实在很多语言都有测试...
    99+
    2023-06-25
  • java单元测试JUnit框架原理的示例分析
    小编给大家分享一下java单元测试JUnit框架原理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下:1 简介JUnit是一个Java语言的单元测试框架,它由 Kent Beck 和 Erich Gamma...
    99+
    2023-05-30
    java junit
  • ASP.NET Core单元测试中如何Mock HttpClient.GetStringAsync()的示例分析
    ASP.NET Core单元测试中如何Mock HttpClient.GetStringAsync()的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人...
    99+
    2024-04-02
  • HTML元素属性测试的示例分析
    这篇文章给大家分享的是有关HTML元素属性测试的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。code 元素的含义(语义)为“代码内容”,FireFox 在渲染该元素时,...
    99+
    2024-04-02
  • vue 单元测试的推荐插件和使用示例
    目录框架 一流的错误报告 活跃的社区和团队 Jest Mocha 推荐插件 Vue Testing Library (@testing-library/vue) Vue Test U...
    99+
    2024-04-02
  • 前端自动化测试Vue中TDD和单元测试示例详解
    目录1、简单用例入门2、快照测试3、覆盖率测试4、结合 Vuex 进行测试1、简单用例入门 Vue 提供了 @vue/test-utils 来帮助我们进行单元测试,创建 Vue 项...
    99+
    2023-02-14
    Vue TDD单元测试 Vue 前端自动化测试
  • Go语言单元测试和基准测试实例代码分析
    本篇内容主要讲解“Go语言单元测试和基准测试实例代码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言单元测试和基准测试实例代码分析”吧!背景测试的出现是为了避免项目中出现重大事故测试是...
    99+
    2023-07-05
  • vue 单元测试初探
    目录前言 为什么要引进单元测试? 单元测试概述 测试开发的模式 1. 测试驱动开发(TDD - Test Driven Development) 2. 行为驱动开发(BDD - Be...
    99+
    2024-04-02
  • vue表单的示例分析
    这篇文章给大家分享的是有关vue表单的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、基本用法你可以用 v-model 指令在表单 <input> 及 &l...
    99+
    2024-04-02
  • springboot单元测试依赖踩坑实例源码分析
    本文小编为大家详细介绍“springboot单元测试依赖踩坑实例源码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot单元测试依赖踩坑实例源码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • python中unittest单元测试的步骤分析
    这篇文章主要讲解了“python中unittest单元测试的步骤分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中unittest单元测试的步骤分析”吧!说明导入unittes...
    99+
    2023-06-20
  • Vue实例的测试实战:掌握其单元测试和集成测试的精髓
    单元测试 单元测试专注于隔离单个 Vue 实例,并验证其对特定输入的预期输出。以下是一个使用 Vue Test Utils 进行 Vue 实例的单元测试的示例: import { shallowMount } from "@vue/te...
    99+
    2024-02-18
    Vue 测试 单元测试 集成测试 Vue 测试库
  • 测试VS2010代码的示例分析
    这篇文章主要介绍测试VS2010代码的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!VS 2008中的代码智能提示为帮助示范这个VS 2010代码中的智能提示的改进,让我们先来在VS 2008中做一个简单的例...
    99+
    2023-06-17
  • Sysbench基准测试的示例分析
    这篇文章给大家分享的是有关Sysbench基准测试的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 Sysbench和TPCC-MySQL一样...
    99+
    2024-04-02
  • PHP 单元测试工具的优缺点分析
    php 单元测试工具分析:phpunit:适用于大型项目,提供全面功能,易于安装,但可能冗长且速度较慢。phpunit wrapper:适合小型项目,易于使用,针对 lumen/lara...
    99+
    2024-05-06
    php 单元测试 laravel
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作