Во время выполнения модульного тестирования с Jasmine я должен шутить, шпионить или заглушить мой сервис, который внедряется в мой компонент? - PullRequest
0 голосов
/ 03 марта 2020

В моем component.ts сервис был внедрен в конструктор компонента, который подписывается на функцию в сервисе и получает информацию. Как я могу протестировать свой компонент в этом случае?

В component.ts у меня есть следующий код: -

Как я могу продолжить в этом случае?

1 Ответ

0 голосов
/ 03 марта 2020

Вам придется либо издеваться над своим сервисом, что всегда является хорошей идеей, когда речь идет о модульном тестировании, либо использовать шпиона, как описано ниже.

Опция Mock:

...
providers: [
 {provide: PartService, useClass: MockPartService},
],
...

class MockPartService {
   list(): Observable<Part[]> {
   return Observable.of([...]);
}

Вам нужно написать MockService с идентичной сигнатурой метода, той, которую вы вызываете в своем тесте. Возможно, вы захотите жестко закодировать ожидаемое возвращаемое значение в этот MockClass. Обычно это то, что вы хотите, когда хотите издеваться, например, запросы API и т. Д. c. так что ваш тест не сработает.

Опция Spy:

const mockParts: Part[] = [...]
const serviceSpy = spyOn(PartService, 'list').and.ReturnValue(Observable.of(mockParts));

Используйте это, если вы ожидаете, что заданный c возврат вашей службой для вашего теста.

Вы также можете смешивать оба теста. Заглушка spyOn(YourService, 'YourMethod').and.stub() просто предотвращает вызов фактического метода, но не возвращает никакого значения.

...