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



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

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

这是显而易见的,因为我在我的ngOnInit()方法中订阅了一些东西,但是我可以在测试期间忽略订阅吗?或者我可以在测试期间订阅吗?我在谷歌上搜索了很多关于这个问题的信息,但没有找到任何与angular2测试相关的信息。

假设你有一个服务,它有一个返回一个可观察对象的方法,比如

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

你可以…

创建一个spy1返回一个带有noop订阅函数的对象。

let mockSomeService = {
  getData: () => {}
}
TestBed.configureTestingModule({
  providers: [
    { provide: SomeService, useValue: mockSomeService }
  ]
})
it('...', () => {
  spyOn(mockSomeService, 'getData').and.returnValue({ subscribe: () => {} })
  // do stuff
  expect(mockSomService.getData).toHaveBeenCalled();
})

你可以…

中返回一个实际的可观察对象。
spyOn(mockSomeService, 'getData').and.returnValue(Observable.of(someData))

也许这将优于noop订阅方法,因为如果对服务的调用改变了组件中的某些内容,您可能会想要测试

你可以…

在这篇文章中做一些类似的事情。


1

<子>——看到更多关于间谍

最新更新