我想测试组件中具有的服务在调用方法后是否更新了他的属性。我怎样才能做到这一点?
//.ts
public makeSomething(obj:MyObj) {
//set attribute on my service
this.myService.setAtt(true);
}
.spec.ts
it('should set attrib true on my service ',async(() => {
let myObj: MyObj;
component.makeSomething(myObj);
//should check here if my service has att true!!!!!
//how??
}));
答案 0 :(得分:1)
我建议您在呼叫后使用spyOn(...)
和toHaveBeenCalled()
方法来检查更新后的值。
Here's an example关于如何使用它。
因此,在您的spec
文件中,它看起来像:
it('should set attrib true on my service ',async(() => {
let myObj: MyObj;
spyOn(myService, 'myServiceMethod');
component.makeSomething(myObj);
expect(myService.myServiceMethod).toHaveBeenCalled();
// other checks here...
}));
请不要忘记在您的it
语句中导入服务。
答案 1 :(得分:1)
您不应该测试服务是否已更新。您应该测试的是您的服务方法已被调用。
您将在服务测试中测试您的服务已更新。
这就是单元测试应该做的:测试一个单元。
如果您测试服务已更新,则每次更改服务时都必须更新测试。现在想象一下该服务被400个组件使用,您将怎么办?编辑所有组件?
只需测试该函数已被调用:
const spy = spyOn(component.myService, 'setAttr');
component.makeSomething(myObj);
expect(spy).toHaveBeenCalledWith(true);
expect(spy).toHaveBeenCalledTimes(1);