Aig*_*guo 27 angular2-testing angular
我为我正在测试的组件创建了一个测试(spec)文件.但是当我运行测试时,它给出了一个错误说法
Cannot read property 'subscribe' of undefined
TypeError: Cannot read property 'subscribe' of undefined
at ComponentUndertest.ngOnInit
Run Code Online (Sandbox Code Playgroud)
这是显而易见的,因为我已经在ngOnInit()方法中订阅了某些内容,但是我可以在测试期间忽略订阅吗?或者我可以在测试期间伪造订阅吗?我已经搜索了很多关于这个问题但是找不到与angular2测试有关的任何内容.提前致谢.
Pau*_*tha 39
假设你的服务有一个返回一个observable的方法,比如说
class SomeService {
getData(): Observable<Data> {}
}
Run Code Online (Sandbox Code Playgroud)
创建spy1,返回具有正午订阅功能的对象.
let mockSomeService = {
getData: () => {}
}
TestBed.configureTestingModule({
providers: [
{ provide: SomeService, useValue: mockSomeService }
]
})
it('...', () => {
spyOn(mockSomeService, 'getData').and.returnValue({ subscribe: () => {} })
// do stuff
expect(mockSomService.getData).toHaveBeenCalled();
})
Run Code Online (Sandbox Code Playgroud)
在间谍中返回一个实际的观察者
spyOn(mockSomeService, 'getData').and.returnValue(Observable.of(someData))
Run Code Online (Sandbox Code Playgroud)
也许这比noop订阅方法更受欢迎,因为如果对服务的调用正在改变组件中的某些东西,那么这可能是你想要测试的东西
做一些像这篇文章.这是我个人经常去的.这只是一个偏好问题.
1 - 查看有关间谍的更多信息
归档时间: |
|
查看次数: |
29313 次 |
最近记录: |