加载笔记内容...
加载笔记内容...
在 Jest 配置中,testEnvironmentOptions
的 resources: "usable"
选项是前端测试的关键配置项。该配置直接影响了 DOM 环境中资源的加载行为:
resources: "usable"
时,jsdom 会构建完整的资源加载链,模拟真实浏览器行为runScripts: "dangerously"
选项突破了 jsdom 的默认安全限制,允许执行外部脚本canvas
包的缺失会导致图片加载失败,建议在 Docker 基础镜像中预装相关依赖实践案例:某电商项目在测试图片懒加载功能时,发现 IntersectionObserver
无法触发,最终定位到未正确配置 resources
选项导致图片未加载。
1// 推荐配置方案
2testEnvironment: 'jsdom',
3testEnvironmentOptions: {
4 resources: "usable",
5 runScripts: "dangerously",
6 url: "http://localhost" // 必须设置有效 base URL
7}
GitHub Actions Reporter 的配置体现了现代 CI/CD 的集成需求:
::group::
语法实现折叠日志输出,提升可读性silent: false
会增加日志体积,建议在 CI 环境启用而在本地禁用争议点:部分团队认为应始终保留 default
reporter 以保证本地测试体验,但会破坏 GitHub 的注解聚合功能。
--maxWorkers=50%
的参数设置背后是复杂的资源调度算法:
--shard
参数在大型测试套件中展现出强大威力,但需注意:
--seed
参数保证分片稳定性jest-merge-coverage
工具处理分片报告1# 分片执行与合并示例
2npx jest --shard=1/3 --coverage --coverageDirectory=.coverage/1
3npx jest --shard=2/3 --coverage --coverageDirectory=.coverage/2
4npx jest --shard=3/3 --coverage --coverageDirectory=.coverage/3
5npx jest-merge-coverage .coverage
@emotion/react
的 snapshot 测试需要多层级配置:
@emotion/jest
通过 AST 重写实现样式序列化inputSourceMap
配置对错误定位的影响babel-plugin-emotion
共存时的配置技巧争议点:部分团队主张直接使用 @testing-library/react
的 *ByRole
查询,避免 snapshot 的维护成本。
moduleNameMapper
的配置体现了前端模块解析的复杂性:
transformIgnorePatterns
中的正则表达式需精确匹配 node_modules/.pnpm
d3
等混合模块的特殊处理策略tsconfig paths
包含外部 workspace 时的解析异常处理1// 高级模块映射配置
2transformIgnorePatterns: [
3 `node_modules/.pnpm/(?!(${esModules}|@scope/packageA|@scope/packageB))`
4]
测试超时往往暗示着更深层的工程问题:
setInterval
或未关闭的 socket 连接--detectOpenHandles
参数检测未释放资源jest.mock()
进行节流控制jest.useFakeTimers()
控制时间流逝1// 精确控制异步操作
2test('async flow', async () => {
3 jest.useFakeTimers();
4 const promise = fetchData();
5 jest.advanceTimersByTime(1000);
6 await expect(promise).resolves.toMatchSnapshot();
7});
--clearCache
参数在依赖更新时的必要性--ipc=host
解决 Chromium 沙箱问题vitest
对 Jest API 的兼容性进展参考文献:
- Jest 官方文档 - https://jestjs.io/
- SWC 编译器设计 - https://swc.rs/docs
- Node.js 性能优化指南 - https://nodejs.org/en/docs/guides
- Web 测试最佳实践 - https://web.dev/testing/