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? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in 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: