1
我已经为我正在测试的组件创建了一个测试(规范)文件。但是当我运行测试时,它给了我一个错误,说
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
<子>——看到更多关于间谍子>