Angular 8 - 测试从服务调用数组的函数

Angular8 - Test a function that calls a array from a service

我想测试的功能和我目前的测试(不起作用)。:

canShowIt() {
  let showit = false;
  const profils = this.requestsService.userProfil;
  showit = profils.some((profil) => profil.id === this.profileDetail.id);
  return showit;
}

it('should return true', () => {
  const service = TestBed.get(RequestService);
  spyOn(service, 'userProfil').and.returnValue( of ([{
    id: 1
  }]));
  const result = component.canShowIt();
  expect(service.userProfil).toHaveBeenCalled();
  expect(result).toEqual(true);
});

如果 RequestsService#userProfil 是 public 成员,则无需创建 spy。您可以在测试开始时简单地设置所需的值。

it('should return true', () => {
  this.requestsService.userProfil = [{id: 1}];
  ...

如果您将 RequestsService#userProfil 转换为私有成员并创建一个 getter method 来访问它,您现有的测试(没有 expect(service.userProfil).toHaveBeenCalled();)应该可以工作。

class RequestsService {

  private _userProfil: [];
    
  public get userProfil() {
    return this._userProfil;
  }

  ...