有没有一种简单的方法可以用 TypeScript 开玩笑地模拟段的 AnalyticsJS analytics.track()?

问题描述

在我们的 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 方法,以便测试可以干净地执行。