Угловое тестирование с использованием Karma-

Я тестирую компонент Angular, и мой компонент зависит от службы, поэтому в конструктор моего компонента служба вводится логически. На ngOnInit сервис вызывается в нескольких местах.

Проблема, с которой я столкнулся, заключается в том, что мне нужно протестировать часть компонента, и я хочу имитировать только небольшую часть службы. После издевательства я понял, что большая часть кода, находящегося в ngOnInit, зависит от службы, поэтому в результате я копирую множество кода в MockService, так что я могу заставить ngOnInit работать и правильно создать экземпляр компонента. Но при этом много репликации.

Я не хочу высмеивать все, что есть в этой службе, только ту часть, которая мне нужна в функции it (). Как мне обойти это?

Есть ли способ, которым я все еще могу создать свой компонент для тестирования, внедрить фиктивный сервис, но на нем он () отменяет все, что мне нужно?

Я не хочу создавать MockService, расширяя OriginalService, поскольку я хочу полностью изолировать компонент.

Спасибо.

Вместо того, чтобы издеваться над всем, вы можете использовать шпиона и позволить инъекции сделать все остальное за вас. Взгляните на codecraft.tv/courses/angular/unit-testing/mocks-and-spies/…

dream88 29.11.2018 17:42
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
1
28
1

Ответы 1

Если я понимаю, о чем вы спрашиваете, то да, это выполнимо. Я собрал Stackblitz, чтобы показать вам один из возможных способов решения этой проблемы. В stackblitz есть простой компонент, который зависит от SomeService.

Как вы можете видеть в файле my.component.spec.ts, я использую шпион, чтобы переопределить только ту часть SomeService, которая необходима для каждой спецификации (функция 'it').

Надеюсь, вы сможете использовать это как образец и изменить для своей конкретной реализации.

Другие вопросы по теме