在 运行 npm 测试后无法读取未定义的 属性 'subscribe'(Angular 2 单元测试)

Cannot read property 'subscribe' of undefined after running npm test (Angular 2 unit testing)

我已经为我正在测试的组件创建了一个测试(规范)文件。但是当我 运行 测试时,它给我一个错误

Cannot read property 'subscribe' of undefined
TypeError: Cannot read property 'subscribe' of undefined
at ComponentUndertest.ngOnInit

这很明显,因为我已经在我的 ngOnInit() 方法中订阅了一些东西,但是我可以在测试期间忽略订阅吗?或者我可以在测试期间伪造订阅吗? 我在谷歌上搜索了很多关于这个问题的内容,但找不到与 angular2 测试相关的任何内容。 提前致谢。

假设您有一个服务有一个 return 可观察的方法,比如

class SomeService {
  getData(): Observable<Data> {}
}

你可以....

创建一个 spy1 在其中 return 一个具有 noop 订阅函数的对象。

let mockSomeService = {
  getData: () => {}
}

TestBed.configureTestingModule({
  providers: [
    { provide: SomeService, useValue: mockSomeService }
  ]
})

it('...', () => {
  spyOn(mockSomeService, 'getData').and.returnValue({ subscribe: () => {} })
  // do stuff
  expect(mockSomService.getData).toHaveBeenCalled();
})

你可以...

Return 间谍中的实际可观察​​者

spyOn(mockSomeService, 'getData').and.returnValue(Observable.of(someData))

也许这比 noop 订阅方法更受欢迎,因为如果对服务的调用正在更改组件中的某些内容,这就是您可能想要测试的内容

你可以...

做类似 .

的事情

1 - See more about spies