我想对Angular 10组件进行单元测试。在组件的ngOnInit方法中,将显示以下代码:
this.subscriptions.push(
this.myService.getDataSubject.subscribe((results) => {
this.data = results;
}
);
此外,在单元测试中
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [MyService]
}).compileComponents();
})
我的单元测试包括
beforeEach(() => {
spyOnProperty(myService, 'getDataSubject', 'get').and.returnValue(of(mockData));
}
在服务本身中
private dataSubject: BehaviorSubject<any> = new BehaviorSubject({});
getDataSubject = this.dataSubject.asObservable();
单元测试失败。我已经尝试了多种变体,但无法获取返回的mockData值。为订阅与BehaviorSubject绑定的属性的组件编写单元测试时,该怎么办?
答案 0 :(得分:0)
更改
I click ...
到
beforeEach(() => { spyOnProperty(myService, 'getDataSubject', 'get').and.returnValue(of(mockData)); }
监视函数而不是属性
答案 1 :(得分:0)
@ PMO1948:您的建议使我朝着正确的方向前进。这是我必须要做的: 代替
spyOn(myService, 'getDataSubject', 'get').and.returnValue(of(mockData));
我调用了填充私有BehaviorSubject的源函数:
myService.requestData().subscribe();
然后我监视了该功能:
spyOn(myService, 'requestData').and.returnValue(of(mockData));
这样,在我的ngOnInit中,当service属性被订阅到模拟数据时,然后返回。至少,这就是我认为正在发生的事情,而且我的测试正在通过。