问题描述
在我们的 React/TypeScript 应用中,我们使用 segment.com 跟踪分析,我们使用 jest 进行单元测试。
index.html 中的 segment.com 代码段添加了一个分析对象,我们可以在代码中的任何位置使用该对象并提供类型。
在我们的一项测试中,执行的代码调用 analytics.track("navigate")
并由于未定义分析而崩溃。
我研究了模拟模块或分配具有存根实现的对象的选项。分配一个对象很丑陋,因为我还需要为其他 19 个方法分配模拟。测试或实际代码不需要该模块,并且导入它以便 jest 可以模拟它被证明是痛苦的。
模拟测试的 analytics.track()
方法的最简单方法是什么?
解决方法
事实证明有一个简单的单行解决方案。向 any 中添加 global.analytics = {track: jst.fn() } as any;
Casting 可以绕过类型检查,并让我们提供一个存根实现,以便仅针对 track 方法,以便测试可以干净地执行。