角度-具有可观察测试的承诺

时间:2018-12-03 00:17:46

标签: angular rxjs karma-jasmine es6-promise

我正在用Angular编写测试。

我要测试的组件具有以下代码:

ngOnInit() {
    this.cognitoService.isAuthenticated().then(() => this.loadForm(),
      () => this.router.navigate(['/home/login']));

  }

  loadForm() {
    this.createFormControls();
    this.createForm();
    this.userProperties = new Map();
    this.cognitoService.getUserAttributes(['name', 'custom:lastName', 'email', 'picture', 'phone_number',
      'custom:id', 'custom:description']).subscribe(attributes => this.completeProfileForm(attributes));
  }

cognitoService.isAuthenticated()方法返回一个Promise。 cognitoService.getUserAttributes 方法返回一个Observable。

测试是这样的:

 it('should create', () => {

spyOn(cognitoService, 'getUserAttributes').and.callFake(function () {
  const userProperties = new Map();
  userProperties.set('custom:lastName', 'lastName');
  userProperties.set('name', 'firstName');
  userProperties.set('email', 'example@email.com');
  userProperties.set('picture', 'picture.png');
  userProperties.set('phone_number', '+5412123434');
  userProperties.set('custom:id', '1');
  userProperties.set('custom:description', 'description');
  return Observable.of(userProperties);
});

    spyOn(cognitoService, 'isAuthenticated').and.returnValue(Promise.resolve());
    component.ngOnInit();
    fixture.detectChanges();
    expect(component).toBeTruthy();

    fixture.whenStable().then(() => {
 expect(component).toBeTruthy();
    });
  });

这样,当我运行测试时,终端显示:空测试套件 但是,如果我以这种方式更改代码:

 ngOnInit() {
   this.cognitoService.isAuthenticated().then(null,
      () => this.router.navigate(['/home/login']));
    this.loadForm();
  }

测试运行正常。但是我不喜欢以前的代码,因为我只想在Promise解决后才调用loadForm()方法。

你知道发生了什么吗?

0 个答案:

没有答案