我正在测试一个Angular组件,而我的组件依赖于一个服务,所以我的组件的构造函数有一个逻辑注入的服务。在ngOnInit
上,有几个地方正在调用该服务。
我遇到的问题是,我需要测试组件的一部分,而只想模拟服务的一小部分。在嘲笑之后,我意识到ngOnInit
中的许多代码都依赖于服务,因此这导致我在MockService中复制大量代码,这样我就可以使ngOnInit
工作,并且可以正确地实例化组件。但与此同时,它也有很多复制。
我不想嘲笑该服务中的所有内容,只想嘲笑it((函数中我需要的部分。我该怎么绕过这个?
有没有一种方法我仍然可以创建我的组件进行测试,注入一个模拟服务,但在it((上覆盖我需要的任何东西?
我不想通过扩展OriginalService来创建MockService,因为我想完全隔离组件。
谢谢。
如果我理解你的要求,那么是的,这是可行的。我制作了一个Stacklitz,向你展示了一种可能的方法。堆栈中的litz是一个依赖于SomeService的简单组件。
正如您在my.component.spec.ts
文件中所看到的,我正在使用间谍来覆盖每个规范("it"函数(所需的SomeService部分。
希望您可以将其用作一种模式,并针对您的特定实现进行修改。