关于jest对react组件的测试(主要是使用的hooks)


1 写这篇文章的时候真的是一言难尽,客户要求代码覆盖率,之前基本没搞过,只听说了一点点.中间踩了无数的坑,在写这篇的时候还有一些警告没有解决或者一些的代码片段没有覆盖到,但也基本满足客户需求了.

 

https://jestjs.io/docs/en/tutorial-react  jest官网,必看.  

https://classic.yarnpkg.com/zh-Hans/docs/install/#windows-stable  

  yarn可以安装一下,windows版本的

 

3 从官网上面我们可以看到他给出的两种情况,一种是脚手架create-react-app搭建的项目,一种是不用脚手架搭建的.我们这个项目是用了的,所以只需要安装一下yarn add --dev react-test-renderer

 

4 执行

jest --init

 

 

 

 回答上面四个问题,结束后会生成一个配置文件

 

5 大概率会遇到语法转化问题,所以babel一系列的需要配置起来,在根目录下新建一个叫babel.config.js的文件.总结就是一句话,缺什么装什么.下面是我的配置,供参考:

"use strict";

module.exports = {
    presets: ['@babel/preset-env', '@babel/preset-react'],
    plugins: ['@babel/plugin-proposal-class-properties', ["@babel/plugin-transform-runtime",
        {
            "regenerator": true
        }
    ]]
};

  

6 实际开始写测试用例

  

https://enzymejs.github.io/enzyme/docs/installation/react-16.html  

 一个很好用的库,安装

   根目录下面新建test.setup.js,在jest.config.js里面配置

 

setupFilesAfterEnv: ['<rootDir>/test.setup.js'],

  

  test.setup.js

import React from 'react';
React.useLayoutEffect = React.useEffect
import Enzyme from 'enzyme'
import Adapter from 'enzyme-adapter-react-16'
import jsdom from 'jsdom'
// import chaiEnzyme from 'chai-enzyme'
const url = 'http://localhost';
const { window } = new jsdom.JSDOM('<!doctype html><html><body></body></html>', { url })

global.window = window
global.document = window.document
global.localStorage = window.localStorage
global.navigator = window.navigator
global.Blob = window.Blob
global.location = window.location

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

  下面放一些依赖和我使用的版本吧

       package.json

{
  "dependencies": {
    "@babel/plugin-proposal-class-properties": "^7.10.1",
    "@babel/preset-react": "^7.10.4",
    "@babel/runtime": "^7.10.3",
    "@date-io/date-fns": "^1.3.11",
    "@material-ui/core": "^4.10.0",
    "@material-ui/icons": "^4.9.1",
    "@material-ui/lab": "^4.0.0-alpha.54",
    "@material-ui/pickers": "^3.2.6",
    "@material-ui/styles": "^4.3.0",
    "apexcharts": "^3.8.3",
    "bootstrap": "^4.4.1",
    "chai": "^4.2.0",
    "chai-enzyme": "^1.0.0-beta.1",
    "classnames": "^2.2.6",
    "clsx": "^1.0.4",
    "date-fns": "^2.2.1",
    "env-cmd": "^10.0.1",
    "font-awesome": "^4.7.0",
    "material-table": "^1.59.0",
    "moment": "^2.24.0",
    "mui-datatables": "^2.11.1",
    "papaparse": "^5.1.0",
    "query-string": "^6.8.3",
    "react": "16.9.0",
    "react-apexcharts": "^1.3.3",
    "react-bootstrap": "^1.0.0",
    "react-csv": "^2.0.3",
    "react-dom": "16.9.0",
    "react-dropzone": "^10.1.9",
    "react-google-maps": "^9.4.5",
    "react-router-dom": "^5.0.1",
    "react-scripts": "3.4.1",
    "react-select": "^3.0.5",
    "react-syntax-highlighter": "^11.0.2",
    "react-toastify": "^5.3.2",
    "recharts": "^1.7.1",
    "tinycolor2": "^1.4.1",
    "wangeditor": "^3.1.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "set RUN_TEST=test&&jest --verbose -u --coverage",
    "eject": "react-scripts eject",
    "start:dev": "env-cmd -f .env.development npm run start",
    "build:dev": "env-cmd -f .env.development npm run build",
    "build:uat": "env-cmd -f .env.uat npm run build",
    "build:ci": "env-cmd -f .env.ci npm run build"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "cross-env": "^7.0.2",
    "@babel/plugin-transform-runtime": "^7.10.3",
    "@testing-library/react": "^10.4.1",
    "enzyme": "^3.11.0",
    "enzyme-adapter-react-16": "^1.15.2",
    "jest-html-reporters": "^2.0.1",
    "jsdom": "^16.2.2",
    "react-test-renderer": "^16.13.1"
  }
}

  安装完毕如有报错,可以yarn upgrade一下.也是看执行结果给你的提示是什么,到目前为止我们的环境准备基本完成.

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM