如何改变可观察属性

时间:2020-11-12 04:27:58

标签: angular unit-testing observable karma-jasmine behaviorsubject

我想对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绑定的属性的组件编写单元测试时,该怎么办?

2 个答案:

答案 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属性被订阅到模拟数据时,然后返回。至少,这就是我认为正在发生的事情,而且我的测试正在通过。