给 react 添加测试

记录给react hook添加测试过程中踩过的坑

项目基于react+ts

jest

首先参考官方安装以下依赖(项目不是使用CRA创建)
https://www.jestjs.cn/docs/tutorial-react

yarn add --dev jest babel-jest @babel/preset-env @babel/preset-react react-test-renderer

jest – 测试框架
babel-jest – 测试时对代码进行预处理
@babel/preset-env – babel插件,根据环境(目标平台)转换js代码
@babel/preset-react – babel插件,转换jsx
react-test-renderer – 将react组件转成js对象,描述dom

为了顺利完成测试,还有几个库需要安装。。。

yarn add --dev @testing-library/react @testing-library/react-hooks @types/jest

@testing-library/react – 封装了一些操作,方便测试,例如查找元素、清除
@testing-library/react-hooks – 测试hook用,避免需要写一个组件来测试(react hook要求在函数组件中使用)
@types/jest – jest的类型说明,避免eslint报错

添加配置

在package.json的script中添加test: jest
在eslint的配置文件中添加

{
  "env": {
    "jest": true
  }
}

若使用了webpack的resolve.modules或者resolve.alias,在测试时会报找不到文件,根据实际情况在package中添加如下配置

{
  "jest": {
    "moduleDirectories": [
      "node_modules",
      "src"
    ]
  }
}

webpack中若使用了环境变量,jest也需要配置

{
  "jest": {
    "globals": {
      "__SERVER_ENV__": "dev"
    }
  }
}

typedoc

地狱难用,文档没有示例不清晰,真的难用。暂时没有必要生成文档,此处暂缓。
推荐使用v0.19版本,勉强能用。

typedoc-plugin-sourcefile-url
typedoc-plugin-external-module-name 将同一文件夹下的不同模块合为一个模块