有没有一种简单的方法可以用 TypeScript 来模拟段 Analytics JS analytics.track()?

Is there a simple way to mock segment's AnalyticsJS analytics.track() in jest with TypeScript?

在我们的 React/TypeScript 应用程序中,我们使用 segment.com 跟踪分析,我们使用 jest 进行单元测试。

我们 index.html 中的 segment.com 片段添加了一个分析对象,我们可以在代码中的任何地方使用它,并且提供了类型。

在我们的一项测试中,执行的代码调用 analytics.track("navigate") 并因未定义分析而崩溃。

我研究了模拟模块或分配具有存根实现的对象的选项。分配一个对象很难看,因为我还需要将模拟分配给其他 19 个方法。测试或实际代码不需要该模块并导入它以便开玩笑可以模拟它证明是痛苦的。

仅模拟 analytics.track() 测试方法的最简单方法是什么?

原来有一个简单的一行解决方案。将 global.analytics = {track: jst.fn() } as any; 转换添加到 any 绕过类型检查并让我们提供存根实现,因此仅用于 track 方法,以便测试可以干净地执行。