【发布时间】:2020-06-26 06:31:54
【问题描述】:
我有一个返回用户对象的服务。该服务使用从私有属性设置的公共属性。
private privateProperty: BehaviorSubject<User | Me | null> = new BehaviorSubject(
null
);
public publicProperty: Observable<
User | Me | null
> = this.privateProperty.asObservable();
服务请求是通过我的组件内的私有方法调用的,我在单元测试中难以覆盖它。我不确定如何设置我的测试以命中该私有方法,从而调用该服务并将一些值设置为已定义。
这是我的测试。
it('should set user oninit', ()=> {
let me: Me | User;
spyOn(userService, 'publicProperty').and.returnValue(of(userMock));
component.ngOnInit();
expect(userService.publicProperty).toHaveBeenCalled();
expect(component.me).toBeDefined();
});
但是在运行测试时,我得到了这个失败的结果:
expect(spy).toHaveBeenCalled()
Expected number of calls: >= 1
Received number of calls: 0
61 | component.ngOnInit();
62 |
> 63 | expect(userService.publicProperty).toHaveBeenCalled();
| ^
64 | expect(component.me).toBeDefined();
65 |
66 | });
我不确定我做错了什么,以前有没有人解决过这个问题?
【问题讨论】:
-
publicProperty 不是方法,而是属性。您需要设置不同类型的间谍 - spyOnProperty
-
我尝试设置 spyOnProperty - 但我找不到名称 'spyOnProperty' - 没有快速修复
-
这是另一个问题,但
spyOnProperty在这种情况下将是最有效的方法 -
用玩笑测试。,这似乎是问题