博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从零开始React项目架构(五)
阅读量:6136 次
发布时间:2019-06-21

本文共 2888 字,大约阅读时间需要 9 分钟。

前言


作为一个项目而言,单元测试应该是必备的一部分,也是最容易被大家忽略的一部分,这篇文章就介绍一下jest 和 enzyme。

Jest 特点:

  1. 测试用例并行执行,更高效
  2. 强大的 Mock 功能
  3. 内置的代码覆盖率检查,不需要在引入额外的工具
  4. 集成 JSDOM,可以直接进行 DOM 相关的测试
  5. 更易用简单,几乎不需要额外配置
  6. 可以直接对 ES Module Import 的代码测试
  7. 有快照测试功能,可对 React 等框架进行 UI 测试

开发


  1. 安装jest
npm install jest babel-jest enzyme enzyme-adapter-react-16复制代码

我们先写个列子试一下,在tests文件夹下创建demo.jsdemo.test.js

// demo.jsfunction sum(a, b){    return a + b;}  module.exports = sum;复制代码
// demo.test.jsconst sum = require('./sum.js')test('test 1 plus 2 result', () => {  expect(sum(1 , 2)).toBe(3);})test('test 2 plus 2 should equal 4', () => {  expect(sum(2 , 2)).toBe(4);})复制代码

package.json的 script 中加入

"test": "jest"复制代码

我们运行npm run test看下效果

  1. 让我们写个简单的UI测试
    routes中创建Demo2.jsx
import React from 'react';export default class CheckboxWithLabel extends React.Component {    constructor(props) {        super(props);        this.state = { isChecked: false };        this.onChange = this.onChange.bind(this);    }    onChange() {        this.setState({ isChecked: !this.state.isChecked });    }    render() {        return (                    );    }}复制代码

tests中创建`demo2.test.js

import React from 'react'import { configure } from 'enzyme';import Adapter from 'enzyme-adapter-react-16';import { shallow } from 'enzyme'import Demo from '../src/routes/Test.jsx'configure({ adapter: new Adapter() });test('CheckboxWithLabel changes the text after click', () => {    const checkbox = shallow(
); expect(checkbox.text()).toEqual('Off'); checkbox.find('input').simulate('change'); expect(checkbox.text()).toEqual('On'); });复制代码

我们运行npm run test 来看下效果

PS F:\mytest\react-architecture> npm run test> react-architecture@1.0.0 test F:\mytest\react-architecture> jest PASS  tests/demo.test.js PASS  tests/demo2.test.jsTest Suites: 2 passed, 2 totalTests:       3 passed, 3 totalSnapshots:   0 totalTime:        2.402sRan all test suites.复制代码

好,我们吧demo2.test.jsexpect(checkbox.text()).toEqual('Off');expect(checkbox.text()).toEqual('On'); 换下位置,会出现什么呢?

PS F:\mytest\react-architecture> npm run test> react-architecture@1.0.0 test F:\mytest\react-architecture> jest FAIL  tests/demo2.test.js  ● checkbox change    expect(received).toEqual(expected)    Expected value to equal:      "On"    Received:      "Off"       8 | test('checkbox change', () => {       9 |     const checkbox = shallow(
); > 10 | expect(checkbox.text()).toEqual('On'); | ^ 11 | 12 | checkbox.find('input').simulate('change'); 13 | at Object.
(tests/demo1.test.js:10:29) PASS tests/demo.test.jsTest Suites: 1 failed, 1 passed, 2 totalTests: 1 failed, 2 passed, 3 totalSnapshots: 0 totalTime: 2.325sRan all test suites.复制代码

总结


这篇文章我们介绍了在项目中加入单元测试, 简单写了一些测试例子。

参考文章


系列文章


源码


转载地址:http://uqrua.baihongyu.com/

你可能感兴趣的文章
[SCOI2005][BZOJ 1084]最大子矩阵
查看>>
学习笔记之Data Visualization
查看>>
Leetcode 3. Longest Substring Without Repeating Characters
查看>>
【FJOI2015】金币换位问题
查看>>
数学之美系列二十 -- 自然语言处理的教父 马库斯
查看>>
Android实现自定义位置无标题Dialog
查看>>
面试总结
查看>>
Chrome浏览器播放HTML5音频没声音的解决方案
查看>>
easyui datagrid 行编辑功能
查看>>
HDU 2818 (矢量并查集)
查看>>
实验二 Java面向对象程序设计
查看>>
------__________________________9余数定理-__________ 1163______________
查看>>
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
416. Partition Equal Subset Sum
查看>>
Django之FBV与CBV
查看>>