在 运行 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 订阅方法更受欢迎,因为如果对服务的调用正在更改组件中的某些内容,这就是您可能想要测试的内容
你可以...
做类似 .
的事情
我已经为我正在测试的组件创建了一个测试(规范)文件。但是当我 运行 测试时,它给我一个错误
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 订阅方法更受欢迎,因为如果对服务的调用正在更改组件中的某些内容,这就是您可能想要测试的内容
你可以...
做类似