什么时候应该使用快照测试?

When should I use Snapshot testing?

开玩笑地实现快照测试相当容易,但我对此不太满意,因为感觉我实际上并没有在测试任何东西。

在单元测试中,我可以轻松地获取我想要测试的组件并编写对它们实际行为的期望,还可以测试它们应该呈现的内容。但关于快照测试,我所能看到的是,当你改变某些东西并向你展示差异时它会产生......类似于 git diff 所做的。

那么我什么时候应该使用快照测试而不是单元测试?

您可以将快照测试视为具有自动生成的组件假设的单元测试。

优点是您可以轻松测试复杂结构而无需编写太多代码,当某些内容发生变化时您会收到很好的警告,并且您可以轻松更新此测试。

缺点是,仅通过阅读测试并不总是清楚测试的内容和预期的行为是什么,创建的快照可能会非常复杂,以至于您忽略了错误的假设,最终导致预期的结果,并且更新快照非常容易,错误的东西可能会潜入。

因此,在使用快照测试时,让它们更细化非常重要,因此不要总是测试整个组件,而是进行一些较小的测试来测试它的一部分,并拥有良好的代码审查文化,以发现组件中的错误快照。

您应该同时编写快照和单元测试。 Snapshot tests 将在渲染时检查变化,例如 className、内联样式、某些条件渲染或循环是否像以前那样工作。您仍然应该为无法通过简单呈现检查的任何功能编写单元测试(如果在单击时调用 onClick 等等)。