服务测试,spyOn.returnValue不返回给定值

时间:2019-05-10 15:46:11

标签: angular testing jasmine

ApiServiceSpy

export class ApiServiceSpy {
  get() {
    return Observable.of(null);
  }
}

UserService

export class UserService {
  constructor(private apiService: ApiService) {
    this.initUser();
  }

  initUser() {
    this.fetchUser().subscribe(user => console.log(user.name));
  }

  fetchUser(): {name: string} {
    return this.apiService.get('user');
  }
}

UserService.spec

export class UserServiceSpec {
  ...
  {
    providers: [
      {provide: ApiService, useClass: ApiServiceSpy}
    ]
  }
  ...

  it('should be created', () => {
    expect(service).toBeTruthy();
  });
}

好的,因此现在“应该创建”测试失败了,因为服务的构造函数调用了initUser方法,该方法使用fetchUser并尝试进入user.name,但是apiService.get返回{ {1}},因此我们无法读取null的null-可以理解。

所以我正试图监视name

UserService.spec

fetchUser method

不幸的是,结果是一样的。这怎么可能?我只是在监视整个export class UserServiceSpec { ... { providers: [ {provide: ApiService, useClass: ApiServiceSpy} ] } ... beforeEach(() => { spyOn(service, 'fetchUser').and.returnValue(Observable.of({name: 'Daniel'}); }); it('should be created', () => { expect(service).toBeTruthy(); }); } 方法,但规范仍将apiService.get间谍视为更重要。

0 个答案:

没有答案