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



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

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

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

我研究了模拟模块或分配具有存根实现的对象的选项。分配一个对象很难看,因为我还需要将mock分配给其他19个方法。测试或真正的代码都不需要这个模块,而导入它,让小丑嘲笑它,这证明是痛苦的。

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

原来有一个简单的单行解决方案。将global.analytics = {track: jst.fn() } as any;Casting添加到任何类型中都可以绕过类型检查,并让我们提供一个存根实现,以便只为track方法提供存根实现,从而使测试可以干净地执行。

这个模拟将帮助

beforeEach(() => {
Object.defineProperty(window, 'analytics', {
enumerable: false,
configurable: false,
writable: true,
value: 'false',
});
window.analytics = {
track: jest.fn(),
identify: jest.fn(),
page: jest.fn(),
};
});

window.analytics = {
page: jest.fn(),
track: jest.fn(),
identify: jest.fn(),
};

相关内容

  • 没有找到相关文章

最新更新