Тестирование метода, который использует наблюдаемый на конструкторе - PullRequest
1 голос
/ 23 сентября 2019

Мне нужно покрыть этот метод с помощью Jasmine в моем коде

private subject = new Subject<any>();

getMessage(): Observable<any> {
    return this.subject.asObservable();
  }

Вот мой конструктор

fiscalDocument: FiscalDocumentData;
subscription: Subscription;

constructor(private _myFiscalDocumentsService: MyFiscalDocumentsService) {  
    this.subscription = this._myFiscalDocumentsService.getMessage().subscribe(message => {
      if (message) {
        this.fiscalDocument = message;

      } else {
        this.fiscalDocument = null;
      } 
    });

  }

Я уже пытался сделать это в моем тесте, у меня естьTestBed.confiugreTestingModule, но я не буду публиковать здесь, потому что я считаю, что это не моя проблема

let dummyOb: Observable<any>;

  beforeEach(() => {
    service = TestBed.get(MyFiscalDocumentsService);
    fixture = TestBed.createComponent(MyFiscalDocumentsDetailsComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
});

it('should getMessage', async () => {
    let generalSpy = spyOn(service, 'getMessage' ).and.returnValue(await Promise.resolve(dummyOb));
    expect(generalSpy).toHaveBeenCalled();
 });

Сообщение об ошибке: Ожидается, что шпион getMessage был вызван. РЕДАКТИРОВАТЬ: я получил условие if, теперь я пробую другое

Ответы [ 3 ]

1 голос
/ 23 сентября 2019

Недопустимо использовать в конструкторе некоторую сложную логику, вместо этого используйте ngOnInit: Разница между Конструктором и ngOnInit

0 голосов
/ 25 сентября 2019

Я решил таким образом, условие if-else не было необходимо

Компонент

ngOnInit() {
this.subscription = this._myFiscalDocumentsService.getMessage().subscribe(message => {
  this.fiscalDocument = message;
});

Spec

it('should getMessage', async () => {
service.subject.next(dummyMock)
const spy = spyOn(service, 'getMessage').and.returnValue(of(dummyMock));
component.ngOnInit();
expect(component.subscription).toBeDefined();
expect(spy).toHaveBeenCalled();

});

0 голосов
/ 23 сентября 2019

К моменту создания шпиона ваш конструктор уже был вызван в beforeEach.Попробуйте это:

let dummyOb: Observable<any>;

it('should getMessage', async () => {
    let generalSpy = spyOn(service, 'getMessage' ).and.returnValue(await Promise.resolve(dummyOb));
    new MyFiscalDocumentsDetailsComponent(service);
    expect(generalSpy).toHaveBeenCalled();
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...