本文以Jest测试框架为例子,介绍罕用的api和用法

装置

第一种:创立我的项目的时候勾选 Unit Testing,后续抉择 Jest第二种:在我的项目根目录执行 vue add @vue/cli-plugin-unit-jest

罕用api

describe:创立测试分组test(别名:it):创立测试用例expect:提供各种办法断定测试后果是否合乎预期

匹配函数

toBe: 值类型判断相等toEqual: 援用类型判断相等toBeNulltoBeUndefinedtoBedefinedtoBeNaNtoBeTruthytoBeFalsytoContain: 数组是否蕴含toHaveLenth: 数组长度toThrow: 异样匹配

生命周期

beforeAll:所有测试用例执行前触发(只触发一次)beforeEach:每个测试用例执行前触发afterAll:所有测试用例执行后触发(只触发一次)afterEach:每个测试用例执行后触发

组件

mount:挂载组件,包含子组件shallowMount:只挂载以后组件,不包含子组件Wrapper:挂载后返回vnode和测试相干的办法vm:返回vue实例classes:返回相干类名的dom或者汇合find:返回满足一个条件的domfindAll:返回满足所有条件的domhtml:返回html字符串text:返回内容字符串setData:设置组件datasetProps:设置组件propstrigger:触发事件

用法

// utils.jsexport function add(a, b) {    return a + b}export class Count {    constructor() {        this.number = 1    }    increase() {        this.number++    }    decreate() {        this.number--    }}export function timeout(fn) {    setTimeout(function() {        fn()    }, 2000)}export function promise() {    return new Promise((resolve, reject) => {        setTimeout(() => {            resolve(2)        }, 2000)    })}

惯例测试

const { add } = require('./utils')test('add 1 + 2 to equal 3', () => {    expect(add(1, 2)).toBe(3)})

分组测试

const { Count } = require('./utils')describe('分组测试', () => {    let obj = null    beforeAll(() => {        console.log('所有test执行前触发')    })    beforeEach(() => {        // 利用生命周期,防止类对象状态相互影响        console.log('每个test执行前触发')        obj = new Count()    })    afterAll(() => {        console.log('所有test执行完触发')    })    afterEach(() => {        console.log('每个test执行完触发')    })    test('测试increase', () => {        expect(obj.increase()).toBe(2)    })    test('测试decrease', () => {        expect(obj.decrease()).toBe(0)    })})

异步代码测试

调用done函数

const { timeout } = require('./utils')test('异步代码测试', done => {    timeout(() => {        expect(2 + 2).toBe(4)        done()    })})

跳过期待的工夫

const { timeout } = require('./utils')test('异步代码测试', done => {    jest.useFakeTimers()    const fn = jest.fn()    timeout(fn)    jest.advanceTimersByTime(2000)    expect(fn).toHaveBeenCalledTimes(1)})

promise函数解决

办法一

const { promise } = require('./utils')test('promise', () => {    return promise().then(res => {        expect(res).toBe(2)    }) })

办法二

const { promise } = require('./utils')test('promise', () => {    return expect(promise()).resolves.toBe(2)})

组件测试

// @/components/Modal.vue<template>  <div v-show="visible" class="modal-box">    <div class="modal-title">{{ title }}</div>    <div class="modal-content"></div>  </div></template><script>expect default {  name: 'Modal',  props: {    visible: {      type: Boolean,      default: false    },    title: {      type: String,      default: ''    }  }}</script>
// @/tests/unit/Modal.spec.jsimport { shallowMount } from '@vue/test-utils'import Modal from '@/components/Modal'it('test Modal props.title', () => {  const title = '题目'  const wrapper = shallowMount(Modal, {    propsData: { title }  })   expect(wrapper.find('.modal-title').text()).toBe(title)})