《单元测试》

186 阅读1分钟

一. chai.js

1. 三个概念:

BDD:Behavier driven development 行为驱动开发

TDD:测试驱动开发

Assert:断言

chai就提供了几种方式,用自然语言写断言。should,expect,assert

2. 安装

npm install -D chai D:给开发者使用,用户不需要

3. 写单元测试

首先要知道,一个Button组件是什么。import Button from './Button.vue'打印出来,是一个对象。我们要把它弄成构造函数

{
    const Constructor=Vue.extend(Button)
    console.log(Constructor);
}

import chai from 'chai'
const expect = chai.expect;
{
    const Constructor=Vue.extend(Button)
    const vm=new Constructor({
        propsData:{
            icon:'setting'
        }
    })
    vm.$mount('#test')
    let useElement=vm.$el.querySelector('use')
    console.log(useElement);
    expect(useElement.getAttribute('xlink:href')).to.eq('#i-setting')
    vm.$el.remove()
    vm.$destroy()
}

先把组件包装成构造函数,用这个构造函数创建一个实例。这个组件需要哪些外部属性,就测试什么。用propsData传进去。把实例挂载到页面。用expect 语法断言,我断言 xlink:href这个属性的值是xxx,如果我的断言与事实相符,控制台就没有反应,否则就报错。

针对点击事件测试。需要用到Mock

// Mock
import chai from 'chai'
import spies from 'chai-spies'
chai.use(spies)
{
    const div=document.createElement('div')
    document.body.appendChild(div)
    const Constructor=Vue.extend(Button)
    const gbutton=new Constructor({
        propsData:{
            icon:'left',
        }
    })
    gbutton.$mount(div)

    let spy=chai.spy(function(){
        console.log(1);
    })

    // 我希望看到这个函数被执行
    gbutton.$on('click',spy)
    let button=gbutton.$el
    button.click()
    expect(spy).to.have.been.called()
}

把事件处理函数包装在spy里,监视这个函数。然后expect这个spy