【发布时间】:2019-03-28 15:59:29
【问题描述】:
假设我们有一个简单的类,它在 window.resize 事件上向 RxJS 主题发出一个新事件。不要注意它可能太复杂了。关键是这个类会发出一些事件。
export class ResizeService {
private resizeSubject = new Subject();
public onResize(): Observable<Window> {
return this.resizeSubject.asObservable();
}
constructor(private eventManager: EventManager) {
this.eventManager.addGlobalEventListener('window', 'resize', (e) => {
this.resizeObject.next(<Window>event.target)
})
}
private onResize(event: UIEvent) {
this.resizeObject.next(<Window>event.target);
}
}
问题是,说到这个类的单元测试,我们是否应该检查我们发送给 RxJS 主题的新事件是否真的会被客户端接收,称为方法onResize。像这样的:
it('should emit a value', fakeAsync(() => {
let subscriptionWorks = false;
fireWindowResizeEvent(new Event({width: 600; height: 400});
resizeService.onResize().subscribe(() => subscriptionWorks = true);
expect(subscriptionWorks).toBeTruthy();
})
)
如果某些开发人员将 onResizeMethod 更改为此,测试将失败:
public onResize(): Observable<Window> {
return this.resizeSubject.asObservable().skip(10);
}
【问题讨论】:
-
不,单元测试意味着您只关心检查您的功能,重点应该是测试是否发出事件。如果可用,您的接收客户端可以有另一组测试用例来检查这些事件(可能在客户端模拟)。
-
@nircraft,如果我不能影响我的主题,我应该如何测试它,因为它是
private?我的建议是从外部的某个地方,模仿一些客户的行为。
标签: angular typescript unit-testing rxjs