Угловой - модульное тестирование Тема ()? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть служба Angular, которая просто использует Subject, но я не знаю, как написать для нее модульные тесты.

Я видел [эту ветку] [1], но не нашел ее очень полезной.

Я пытался издеваться next(), но я более чем потерян.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Во-первых, вы можете просто подписаться на Subject, и внутри ожидать некоторого значения, а после этого просто выполнить метод, который выдаст следующее:

it('should catch what is emitted', () => {
    service.serviceMsg.subscribe(msg => {
        expect(msg).toEqual(something);
    });
    service.confirm(value); // this should match what you expect above
});
0 голосов
/ 30 августа 2018

Вы должны шпионить за service.serviceMsg, а не service, потому что next() метод, кажется, для serviceMsg субъекта.

it('should catch what is emitted', () => {
    const nextSpy = spyOn(service.serviceMsg, 'next');
    service.confirm(ACTION);
    expect(nextSpy).toHaveBeenCalled();
});

РЕДАКТИРОВАТЬ:

Вам также следует изменить способ создания экземпляра service. То, что вы показываете в своем коде, применимо только для component создания экземпляра

beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [MessageService]
    });
    service = TestBed.get(MessageService); // get service instance
    httpMock = TestBed.get(HttpTestingController);
});
...