0


vue 单元测试

vue 单元测试

  • 在 Vue 中的测试:采用的是 Vue 官方工具(Vue-CLI)搭建出来的项目,在这个搭建工具中推荐的两种测试分别是端到端的测试(E2E)单元测试(Unit Test)

端到端测试

  • E2E 或者端到端测试(End-To-End)或者 UI 测试是一种测试方法,它用来测试一个应用从头到尾的流程是否和设计时候所想的一样。简而言之,它从一个用户的角度出发,认为整个系统都是一个黑暗,只有 UI 会暴露给用户,也被称之为黑盒测试

单元测试

测试驱动开发(TDD:Test-Driven Development),也称为

单元测试

。单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。

  • 在 Vue 中的单元测试中主要使用两个工具来进行单元测试,分别是(Karma + Mocha)。

Karma 介绍

Karma 是一个基于 Node.js 的 JavaScript 测试执行过程管理工具(Test Runner)。该工具在 Vue 中的主要作用是将项目运行在各种主流 Web 浏览器进行测试。

换句话说,他是一个测试工具,能让代码在浏览器的环境下进行测试。需要它的原因在于,代码可能是设计在浏览器端执行的,在 node 环境下测试可能会有些 bug 暴露不出来;另外,浏览器有兼容问题,Karma 提供了手段让代码自动运行在多个浏览器(Chrome,firefox,ie 等)环境下运行。

如果代码只会运行在 node 端,那么就不需要使用 Karma 。

Mocha 介绍

Mocha 是一个测试框架,在 vue-cli 中配合 Mocha 本身不带断言库,所以必须先引入断言库,Chai 断言库实现单元测试。

Mocha 的常用命令和用法不算太多,而 Chai 断言库可以看 Chai.js 断言库 API 中文文档,多查多用就可以很快掌握。

断言库

断言

:判断源码的实际执行结果与预期结果是否一致,如果不一致,就会抛出一个错误。

  • 示例探索: // 调用 add(1, 1),结果应该等于 2 。 ​ let expect = require('chai').expect; expect(1 + 1).to.be.equal(2);
  • Chai 是一种断言库。Chai 官方文档
  • 所有的测试用例(it 块)都应该含有一句或多句的断言。它是编写测试用例的关键。断言功能由断言库来实现。

Chai 的基本使用

  • 示例探索 expect(4 + 5).to.be.equal(9); //判断 4 + 5 等于 9 ,返回 true expect(4 + 5).to.be.not.equal(10); // 判断 4 + 5 不等于 10 ,返回 true expect({ bar: 'baz' }).to.be.deep.equal({ bar: 'baz' }); // 深度判断是否相等,返回 true ​ expect(true).to.be.ok; // 判断是 true expect(false).to.not.be.ok; // 判断是 false ​ // 判断类型 expect('test').to.be.a('string'); expect({ foo: 'bar' }).to.be.an('object'); ​ // 判断是否包含 expect([1, 2, 3]).to.include(2);

Vue 中使用测试步骤(一)

  • 在 Node 环境下安装 Vue-CLI npm install -g vue-cli
  • 通过 Vue-CLI 初始化项目文件 vue init webpack testtodo
  • 可以运行初始化的测试 npm run unit

Vue 脚手架已经初始化了一个 HelloWorld.spec.js 的测试文件去测试 HelloWorld.vue ,可以在 test/unit/specs/HelloWorld.spec.js 下找到这个测试文件。(提示:将来所有的测试文件,都将放到 specs 这个目录下,并以

测试脚本名.spec.js

结尾命名)。

第一个测试文件介绍

  • 通过代码走进单元测试 // HelloWorld.spec.js import Vue from 'vue' import HelloWorld from '@/components/HelloWorld' ​ // 创建测试套件:一般情况下,一个测试组件写一个测试套件。 describe('HelloWorld.vue', () => { // 测试用例:用来测试不同的方法或者显示的内容,一个测试组件可以写多个测试用例。 it('should render correct cotents', () => { // 通过 Vue 来渲染 helloworld 。 const Constructor = Vue.extend(HelloWorld) const vm = new Constructor().$mount() // 判断页面中是否有 msg 所渲染出来的内容。等价于 document.querySelector(.hello h1) expect(vm.$el.querySelector('.hello h1').textContent).to.equal('Welcome to Your Vue.js App') }) })
  • 简洁的一种写法 // HelloWorld.spec.js import Vue from 'vue' import HelloWorld from '@/components/HelloWorld' import { mount } from '@vue/test-utils' ​ describe('HelloWorld.vue', () => { it('', () => { let wrapper = mount(HelloWorld, { propsDate: { msg: 'hello' } }) // 设置属性的另外一种写法:wrapper.setProps({ msg: 'hello' }) expect(wrapper.find('h1').text()).to.be.contain('hello') }) })

Vue 中使用测试步骤(二)

  • 安装 Vue.js 官方的单元测试实用工具库(方便在 node 环境下操作 Vue) npm install --save-dev @vue/[email protected]
  • 做一个 TodoMVC 完成查看、增加、删除、修改功能# 每完成一个功能就做一个测试

本文转载自: https://blog.csdn.net/McapricornZ/article/details/128873219
版权归原作者 与墨学长 所有, 如有侵权,请联系我们删除。

“vue 单元测试”的评论:

还没有评论