vitest单元测试配合@vue/test-utils之组件单元测试篇

这篇具有很好参考价值的文章主要介绍了vitest单元测试配合@vue/test-utils之组件单元测试篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

what is vitest & test-utils

vitest 是由 vite 提供支持的极速单元测试框架,VueTestUtils 是 Vue.js 的官方测试实用程序库,vitest 本身是不支持单元组件测试的,需要配合 test-utils 来完成组件单元测试,安装与基本 API 就不再赘述,学会阅读文档与查找资料是一个程序员的基本功

demo

/* Component */
<template>
  <div>
    <div class="test-utils-value">值为:{{ num }}</div>
    <button class="test-utils-button" @click="increment">测试按钮</button>
  </div>
</template>

<script setup lang="ts">
  import { ref } from 'vue'
  import type { Ref } from 'vue'
  const num: Ref<number> = ref(1)
  function increment() {
    num.value++
  }
</script>
// spec | test
import { describe, it, expect } from 'vitest'
import { shallowMount } from '@vue/test-utils'
import AddNum from '@/views/AddNum.vue'

describe('组件单元测试', () => {
  it('test1', async () => {
    const wrapper = shallowMount(AddNum)
    const btn = '.test-utils-button'
    const value = '.test-utils-value'
    expect(wrapper.find(value).text()).toContain('值为:1')
    await wrapper.find(btn).trigger('click')
    expect(wrapper.find(value).text()).toBe('值为:2')
  })
})
  1. demo 由一个组件和测试文件组成
  2. 组件的逻辑非常简单,按下按钮则数字+1,页面显示实时数字
  3. 测试代码中使用 test-utils 库的 shallowMount 方法浅渲染挂载组件(*:浅渲染只渲染当前组件,不会渲染它的子组件,从而避免在测试中与子组件的行为产生干扰)
  • 组件通过 find 方法返回查找元素,再通过 text 方法返回元素的文本内容
  • 然后使用 vitest 库的 expect 创建断言,toContain 是断言检查值是否在数组中,toBe 是断言基础对象是否相等
  • trigger 是 test-utils 中触发 DOM 事件的方法,demo 中触发了点击事件,模拟用户按下了按钮的操作,按下按钮前后都断言了,会判断实际执行结果与预期结果是否一致,如果不一致则会抛出错误
  • 如将tobe('值为:2')改为tobe('值为:3'),就会提示哪一个测试文件中的哪一个测试用例失败,并展示错误的预期值和实际的执行结果
- Expected   "值为:3"
+ Received   "值为:2"

tips

虽然这是一个非常简单 demo,但它还是有很多值得注意的知识点的

  • describe 可以在文件顶层直接使用testbench,它们会被收集为隐式套件的一部分,也可以用describe在当前上下文定义一个新套件,作为一组相关的测试或嵌套套件
  • it ittest的别名,使用ittest都是可以的
  • shallowMount 按照文档描述它是使用挂载组件的别名,所以也可以使用mount(Component, { shallow: true })来浅渲染挂载组件,shallow 的默认值是 false
  • async/await 可以看到 trigger 前使用了 await,这与我们寻常使用 async/await 有一点细微的差别,假如我们去掉 async/await,测试用例将会失败,因为按钮虽然按下了,值也自增了,但 vue 不会立即更新 DOM,而是等到下一个事件循环勾选之后再更新,所以断言会在在 vue 更新之前被调用,拿到的实际执行结果还是初始值 1,与预期值 2 不符,然后抛出错误,这感觉是不是很熟悉,这不就像 Vue 的异步更新策略导致我们对数据的修改不会立马体现到页面变化上,此时如果想要立即获取更新后的 dom 的状态,我们就需要使用到…对,没错就是我们的老朋友nexttick()
import { nextTick } from 'vue'

it('test1', async () => {
  const wrapper = shallowMount(AddNum)
  const btn = '.test-utils-button'
  const value = '.test-utils-value'
  expect(wrapper.find(value).text()).toContain('值为:1')
  wrapper.find(btn).trigger('click')
  await nexttick()
  expect(wrapper.find(value).text()).toBe('值为:2')
})

因为这是很常见的一个问题,test-utils提供了一个快捷方式,可以直接在await后跟触发DOM的事件,省略掉nexttick(),即await wrapper.find(btn).trigger('click'),如此一来我们断言的实际结果就是自增过后的数字,与预期结果相符,测试用例通过文章来源地址https://www.toymoban.com/news/detail-840457.html

到了这里,关于vitest单元测试配合@vue/test-utils之组件单元测试篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue前端自动化测试-Vue Test Utils

    vue-test-utils是vue官方的单元测试框架,提供了一系列非常方便的工具,使我们更轻松地为vue构建的应用来编写单元测试。主流的JavaScript测试运行器有很多,但vue-test-utils都能支持。它是与测试运行器无关的。 通过脚手架 vue-cli 来新建项目的时候,如果选择了 Unit Testing 单元测

    2024年02月13日
    浏览(29)
  • 前端自动化测试(二)Vue Test Utils + Jest

    项目会从快速迭代走向以维护为主的状态,因此引入自动化测试能有效减少人工维成本 。 自动化的收益 = 迭代次数 * 全手动执行成本 - 首次自动化成本 - 维护次数 * 维护成本 对于自动化测试,相对于发现未知问题,更倾向于避免可能的问题。 (1) 单元测试 单元测试(unit t

    2024年02月08日
    浏览(28)
  • Vitest 单元测试

    自动化测试是指 使用独立于待测软件的其他软件或程序来自动执行测试,比较实际结果与预期 并生成测试报告这一过程。在测试流程已经确定后,测试自动化可以自动执行的一些重复性但必要的测试工作。也可以完成手动测试几乎不可能完成的测试。 1. 基于图形用户交互界

    2024年01月21日
    浏览(30)
  • Vitest 单元测试方案

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 简介 Vitest 是一个面向 Vite 的极快的 单元测试 框架。它利用了 Vite 的

    2024年04月08日
    浏览(26)
  • Vitest 单元测试详解

    一、 自动化测试 (TDD)的一些概念: 自动化测试(TDD)概念: 自动化测试是指 使用独立于待测软件的其他软件或程序来自动执行测试,比较实际结果与预期 并生成测试报告这一过程。在测试流程已经确定后,测试自动化可以自动执行的一些重复性但必要的测试工作。也可

    2024年02月20日
    浏览(21)
  • 年轻人的第一款单元测试框架———vitest

    一款合格的开源项目是避免不了单元测试的,这也是这几年单元测试的热度居高不下的原因。而在今年的 state of js 2022 中,我们可以看见在 代码库层级列表 中, vitest 飞升一跃,直接到了第二名,仅次于同门师兄弟 vite ,而 element plus unocss 等知名开源项目都采用了vitest进行单

    2024年01月17日
    浏览(35)
  • 【vitest 单元测试】如何蹭 ant-design-web3 的PR

    这篇文章分享单测经验,希望你能收获到有用的单测知识或者pr思路,填补单测的过程可以深刻理解组件内部的每一个流程,相信一定有所收获。 最近刚好在做一些单测覆盖的工作,在排查执行不到的地方的过程,可以梳理整个组件执行的脉络,甚至发现一些可以优化组件的

    2024年01月16日
    浏览(26)
  • GO——单元测试(test)

    go test用来做什么 做单元测试,测试函数是否符合预期 go test在哪个包 testing 如何使用 参考: https://geektutu.com/post/quick-go-test.html 以 my_func.go 中的Add方法为例 在同一个文件夹下添加my_func_test.go文件 测试文件以_test.go为结尾 里面的测试方法以Test开头,但是不一定是要跟方法名,

    2024年01月20日
    浏览(38)
  • vue-cli5脚手架搭建项目过程详解 -vue组件单元测试

    单元测试是对软件中的最小可测试单元进行测试。(最小可测试单元是要有结果产出的。例如某个方法,单独的某个操作) 单元测试其实是伴随着敏捷开发,它是对更快开发的一种追求。早发现错误比晚发现错误会更好,保证自己的代码符合要求 一: 搭建基于 jest 的 vue 单元

    2023年04月14日
    浏览(42)
  • 仿真与测试:单元测试与Test Harness

    本文描述单元测试的概念,以及Test Harness建立的方法和简单的单元测试过程。 单元测试,简单来说就是在Simulink模型中只测试一小部分单元的功能。关于单元测试的概念网上有很多资料了,这里不再赘述。博主从实际工作经验的角度来谈谈单元测试的价值。 举个简单的例子,

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包