We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
与软件操作行为越接近的测试,越能给予你信心。
本节主要讲述如何在组件库中引入jest以及@testing-library/react,而不会深入单元测试的学习。
如果你对下列问题感兴趣:
那么可以看看以下文章:
<Counter />
React Testing Library
Enzyme
@testing-library/react
安装依赖:
yarn add jest ts-jest @testing-library/react @testing-library/jest-dom identity-obj-proxy @types/jest @types/testing-library__react --dev
TypeScript
jest
React DOM
matchers
DOM
except
mock
新建jest.config.js,并写入相关配置,更多配置可参考jest 官方文档-配置,只看几个常用的就可以。
jest.config.js
module.exports = { verbose: true, roots: ['<rootDir>/src'], moduleNameMapper: { '\\.(css|less|scss)$': 'identity-obj-proxy', '^src$': '<rootDir>/src/index.tsx', '^src(.*)$': '<rootDir>/src/$1', }, testRegex: '(/test/.*|\\.(test|spec))\\.(ts|tsx|js)$', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], testPathIgnorePatterns: ['/node_modules/', '/lib/', '/esm/', '/dist/'], preset: 'ts-jest', testEnvironment: 'jsdom', };
修改package.json,增加测试相关命令,并且代码提交前,跑测试用例,如下:
package.json
"scripts": { ... + "test": "jest", # 执行jest + "test:watch": "jest --watch", # watch模式下执行 + "test:coverage": "jest --coverage", # 生成测试覆盖率报告 + "test:update": "jest --updateSnapshot" # 更新快照 }, ... "lint-staged": { "src/**/*.ts?(x)": [ "prettier --write", "eslint --fix", + "jest --bail --findRelatedTests", "git add" ], ... }
修改gulpfile.js以及tsconfig.json,避免打包时,把测试文件一并处理了。
gulpfile.js
tsconfig.json
const paths = { ... - scripts: ['src/**/*.{ts,tsx}', '!src/**/demo/*.{ts,tsx}'], + scripts: [ + 'src/**/*.{ts,tsx}', + '!src/**/demo/*.{ts,tsx}', + '!src/**/__tests__/*.{ts,tsx}', + ], };
{ - "exclude": ["src/**/demo"] + "exclude": ["src/**/demo", "src/**/__tests__"] }
<Alert />比较简单,此处只作示例用,简单进行一下快照测试。
<Alert />
在对应组件的文件夹下新建__tests__文件夹,用于存放测试文件,其内新建index.test.tsx文件,写入以下测试用例:
__tests__
index.test.tsx
src/alert/tests/index.test.tsx
import React from 'react'; import { render } from '@testing-library/react'; import Alert from '../alert'; describe('<Alert />', () => { test('should render default', () => { const { container } = render(<Alert>default</Alert>); expect(container).toMatchSnapshot(); }); test('should render alert with type', () => { const kinds: any[] = ['info', 'warning', 'positive', 'negative']; const { getByText } = render( <> {kinds.map((k) => ( <Alert kind={k} key={k}> {k} </Alert> ))} </>, ); kinds.forEach((k) => { expect(getByText(k)).toMatchSnapshot(); }); }); });
更新一下快照:
yarn test:update
可以看见同级目录下新增了一个__snapshots__文件夹,里面存放对应测试用例的快照文件。
__snapshots__
再执行测试用例:
yarn test
可以发现我们通过了测试用例,主要是后续我们进行迭代重构时,都会重新执行测试用例,与最近的一次快照进行比对,如果与快照不一致(结构发生了改变),那么相应的测试用例就无法通过。
对于快照测试,褒贬不一,这个例子也着实简单得很,甚至连扩展的 jest-dom提供的 matchers 都没用上。
jest-dom
如何编写优秀的测试用例,我也是一个新手,只能说多看多写多尝试,前面推荐的文章很不错。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
与软件操作行为越接近的测试,越能给予你信心。
本节主要讲述如何在组件库中引入jest以及@testing-library/react,而不会深入单元测试的学习。
如果你对下列问题感兴趣:
那么可以看看以下文章:
<Counter />
的例子延伸,阐述了选择React Testing Library
而非Enzyme
的理由,并对其进行了一些入门教学;@testing-library/react
的官方文档,该库提供的 API 在某个程度上就是在指引开发者进行单元测试的最佳实践;@testing-library/react
的一些实例,提供了各种常见场景的测试;相关配置
安装依赖:
TypeScript
编写jest
测试用例提供支持;React DOM
测试工具,鼓励良好的测试实践;jest
匹配器(matchers
),用于测试DOM
的状态(即为jest
的except
方法返回值增加更多专注于DOM
的matchers
);mock
样式文件。新建
jest.config.js
,并写入相关配置,更多配置可参考jest 官方文档-配置,只看几个常用的就可以。jest.config.js
修改
package.json
,增加测试相关命令,并且代码提交前,跑测试用例,如下:package.json
修改
gulpfile.js
以及tsconfig.json
,避免打包时,把测试文件一并处理了。gulpfile.js
tsconfig.json
编写测试用例
<Alert />
比较简单,此处只作示例用,简单进行一下快照测试。在对应组件的文件夹下新建
__tests__
文件夹,用于存放测试文件,其内新建index.test.tsx
文件,写入以下测试用例:src/alert/tests/index.test.tsx
更新一下快照:
可以看见同级目录下新增了一个
__snapshots__
文件夹,里面存放对应测试用例的快照文件。再执行测试用例:
yarn test
可以发现我们通过了测试用例,主要是后续我们进行迭代重构时,都会重新执行测试用例,与最近的一次快照进行比对,如果与快照不一致(结构发生了改变),那么相应的测试用例就无法通过。
对于快照测试,褒贬不一,这个例子也着实简单得很,甚至连扩展的
jest-dom
提供的matchers
都没用上。如何编写优秀的测试用例,我也是一个新手,只能说多看多写多尝试,前面推荐的文章很不错。
The text was updated successfully, but these errors were encountered: