React Jest UI测试

组件

// demo.js
import React, { PureComponent } from 'react'

class Demo extends PureComponent {
  static defaultProps = {
    title: 'This is a demo',
    value: 0
  }

  constructor (props) {
    super(props)

    const {title, value} = props

    this.state = {
      title,
      value
    }
  }

  add = () => {
    this.setState({
      value: this.state.value +1
    })
  }

  change = ev => {
    this.setState({
      value: ev.target.value
    })
  }

  componentWillReceiveProps (nextProps) {
    this.setState({
      title: nextProps.title
    })
  }

  render() {
    return (
      <div className="container">
        <h1>{this.state.title}</h1>
        <div className="counter">{this.state.value}</div>
        <input value={this.state.value} onChange={this.change} />
        <button onClick={this.add}>value ++</button>
      </div>
    )
  }

}

export default Demo

测试代码

// demo.test.js
import React from 'react';
import Enzyme, { mount } from 'enzyme'
import sinon from 'sinon'
import Adapter from 'enzyme-adapter-react-16';
import Demo from '../src/demo'

Enzyme.configure({ adapter: new Adapter() });

// UI测试
describe('UI test #demo', () => {
  it('should have title', () => {
    const wrapper = mount(<Demo />)
    const title = wrapper.find('h1')
    expect(title).toHaveLength(1)
    expect(title.text()).toBe('This is a demo')
  })

  // 点击测试
  it('should add 1 when click button', () => {
    const wrapper = mount(<Demo />)
    const counter = wrapper.find('.counter')
    const v1 = parseInt(counter.text())
    wrapper.find('button').simulate('click')
    const v2 = parseInt(counter.text())
    expect(v2).toBe(v1 + 1)
  })

  // 输入测试
  it('should change when input number', () => {
    const wrapper = mount(<Demo />)
    const counter = wrapper.find('.counter')
    wrapper.find('input').simulate('change', {
      target: {
        value: '5'
      }
    })
    expect(counter.text()).toBe('5')
  })

  // props传值和生命周期测试
  it('should change when props change', () => {
    const wrapper = mount(<Demo title="Demo" value={5} />)
    sinon.spy(Demo.prototype, 'componentWillReceiveProps')
    const title = wrapper.find('h1')
    wrapper.setProps({
      title: 'Demo2'
    })
    expect(title.text()).toBe('Demo2')

    const callCount = Demo.prototype.componentWillReceiveProps.callCount
    expect(callCount).toBe(1)
  })
})
// .babelrc
{
  "presets": ["env", "react"],
  "plugins": [
    "transform-class-properties"
  ]
}

执行命令

jest test/demo.test.js --coverage

测试结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值