我想测试一个组件中的服务是否在调用方法后更新了他的属性。我怎样才能做到这一点?
//.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??
}));
您不应该测试您的服务是否已更新。您应该测试的是您的服务方法已被调用。
您将测试您的服务已在服务测试中更新。
这是单元测试应该做的:测试一个单元。
如果您测试您的服务已更新,则每次更改服务时都必须更新测试。现在想象这个服务被400个组件使用,你会做什么?编辑所有组件?
只需测试该函数已被调用:
const spy = spyOn(component.myService, 'setAttr');
component.makeSomething(myObj);
expect(spy).toHaveBeenCalledWith(true);
expect(spy).toHaveBeenCalledTimes(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
声明中导入您的服务。