【问题标题】:Angular 9 unit test external function referring property inside service gives errorsAngular 9 单元测试外部函数引用服务内的属性给出错误
【发布时间】:2021-05-28 05:08:09
【问题描述】:

我有一个服务来运行单元测试,如下所示。它有两个使用服务参数的辅助函数,如下所示。

这里是 service.ts 文件

export function storeToStorage<T>(key: string, item: T): void {
  this.storageService.libLocalStorage( 'set' ,key, item )
}

export function getFromStorage<T>(key: string): T {
  return this.storageService.libLocalStorage( 'get' ,key )
}


@Injectable({
  providedIn: 'root'
})
export class TableColumnService {
...
constructor(private storageService: LocalStorageService) {
    localStorage.removeItem('KEY');
    this._initializeColumns();
  }
...
}

这里本地存储服务是单独实现的用于管理应用程序存储的服务。并且应用程序正在运行,没有任何错误。

我对 service.spec.ts 的实现如下

describe('TableColumnService', () => {
  let service: TableColumnService;
  let localStorageService: LocalStorageService;

 beforeEach(async (() => {
    TestBed.configureTestingModule({
      imports: [TestSharedModule],
      providers: [LocalStorageService]
    });
    service = TestBed.inject(TableColumnService);
    localStorageService = TestBed.inject(LocalStorageService);

  }));

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

});

运行时出现以下错误

Chrome Headless 90.0.4430.212 (Mac OS 10.15.7) TableColumnService should be created FAILED
        Failed: Cannot read property 'storageService' of undefined
            at <Jasmine>

我尝试如下监视外部函数。但是给出错误

beforeEach(async (() => {
    TestBed.configureTestingModule({
      imports: [TestSharedModule],
      providers: [LocalStorageService]
    });
    service = TestBed.inject(TableColumnService);
    localStorageService = TestBed.inject(LocalStorageService);

    spyOn(storeToStorage, 'storeToStorage').and.returnValue({});
    spyOn(getFromStorage, 'getFromStorage').and.returnValue({});

  }));

它在间谍功能上给出以下错误

Argument of type '{}' is not assignable to parameter of type 'never'

【问题讨论】:

    标签: javascript angular unit-testing mocking spy


    【解决方案1】:

    我认为您的间谍活动不正确;它应该如下所示,是的,您必须在 ts 文件中公开 stroage 服务。如果你不想公开它,你也可以在你的规范文件中为这个服务创建一个存根。

    spyOn(service.storageService, 'storeToStorage').and.returnValue({});
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多