javascript - 如何管理包含主题数据的组件的单元测试快照?
问题描述
让我们假设这个简单的例子有一个组件和一个单元测试
组件.jsx
const theme = process.env.THEME
export const Component = ({ title }) => {
return (
<>
<h2>{theme} {title}</h2>
</>
)
}
组件.test.jsx
import { Component } from './Component'
describe('<Component />', () => {
it('renders properly', () => {
const wrapper = shallow(<Context {...props} />)
expect(wrapper).toMatchSnapshot()
})
})
我正在运行的项目取决于 const theme,因此在我的管道中,我有更多的构建、更多的部署,每个主题一个。当然,快照失败是因为每次我运行toMatchSnapshot()功能时,它都会写入/检查文件夹中的输出./__snapshots__
,因此第一个主题的测试成功运行,然后其他主题的测试失败。
这个问题有解决方案吗?
- 为每个组件提供主题作为道具(可怕的方法)
- 避免这些组件的快照(不是很好的方法,因为我想为我的测试套件保留此功能)
- 使用 React.createContext (好方法,但它需要在整个项目中进行一些重构)
我可以尝试使用更好的东西吗?提前谢谢大家
解决方案
带有用于测试的模拟上下文数据的 React.createContext 确实是最好的方法。
推荐阅读
- python-3.x - 如何在不改变python中输入元素顺序的情况下用数字分隔单词
- windows - 在 Eclipse 中调用“make”和在终端中调用“make”有什么区别?
- html - 如何以这种格式 apache 日志?
- visual-studio-code - 在 VS Code 中使用语句自动导入
- laravel - Store multiple rows in multiple tables in Laravel
- git - Understanding Git: Latest push is not visible on production server
- android - How to navigate back in nested graph from the third level to the second level?
- powershell - Error while activating virtual environment in Windows 10 PowerShell
- angular - 使用文件配置生产 Angular 应用程序
- openssl - What is the file format of the private key when combining with a .cer to create a .pfx using OpenSSL