Я тестирую компонент Angular, и мой компонент зависит от службы, поэтому в конструктор моего компонента служба вводится логически. На ngOnInit сервис вызывается в нескольких местах.
Проблема, с которой я столкнулся, заключается в том, что мне нужно протестировать часть компонента, и я хочу имитировать только небольшую часть службы. После издевательства я понял, что большая часть кода, находящегося в ngOnInit, зависит от службы, поэтому в результате я копирую множество кода в MockService, так что я могу заставить ngOnInit работать и правильно создать экземпляр компонента. Но при этом много репликации.
Я не хочу высмеивать все, что есть в этой службе, только ту часть, которая мне нужна в функции it (). Как мне обойти это?
Есть ли способ, которым я все еще могу создать свой компонент для тестирования, внедрить фиктивный сервис, но на нем он () отменяет все, что мне нужно?
Я не хочу создавать MockService, расширяя OriginalService, поскольку я хочу полностью изолировать компонент.
Спасибо.





Если я понимаю, о чем вы спрашиваете, то да, это выполнимо. Я собрал Stackblitz, чтобы показать вам один из возможных способов решения этой проблемы. В stackblitz есть простой компонент, который зависит от SomeService.
Как вы можете видеть в файле my.component.spec.ts, я использую шпион, чтобы переопределить только ту часть SomeService, которая необходима для каждой спецификации (функция 'it').
Надеюсь, вы сможете использовать это как образец и изменить для своей конкретной реализации.
Вместо того, чтобы издеваться над всем, вы можете использовать шпиона и позволить инъекции сделать все остальное за вас. Взгляните на codecraft.tv/courses/angular/unit-testing/mocks-and-spies/…