Как проверить успешность и ошибки случаев наблюдаемой подписки - PullRequest
0 голосов
/ 17 января 2020

Моя цель - выполнить успешное модульное тестирование и выявить ошибки функции getData(). В случае успеха должна быть вызвана функция this.success. В случае ошибки должна быть вызвана функция this.failure.

export class MyComponent implements OnInit {

  constructor() {}

  ngOnInit() {
    this.getData();
  }

  getData(): void {
  this.myService.getServiceData().subscribe( 
     //returns an observable
    (result) => {
      this.success(result);
    },
    error => {
      this.failure(error);
    }
  );
  }
}

Это мой модульный тест:

describe('MyComponent', () => {
  let component = MyComponent;
  let fixture: ComponentFixture<MyComponent>;
  let myService = jasmine.SpyObj<MyServiceClass>;

  beforeEach(async(()=> {
    myService = jasmine.createSpyObj('MyServiceClass', ['getServiceData']);

    TestBed.configureTestingModule({
      providers: [
        { provide: MyServiceClass, useValue: myService }
      ]
    }).compileComponents();

    fixture = TestBed.createComponent(MyComponent);
    component = fixture.componentInstance;

  }));

  it('should call success function', async(() => {
    spyOn(component, 'success');
    myService.getServiceData.and.returnValue(asyncData(myMockObj));
    component.getData();
    //fails. If I expect failure() to be called, it ALSO fails!
    expect(component.success).toHaveBeenCalled();
  }));
})

Функция asyncData выглядит так:

export function asyncData<T>(data: T) {
  return defer(() => Promise.resolve(data));
}

Почему происходит сбой и как я могу проверить эти два случаи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...