测试服务是否已使用Karma在方法内更新

问题描述 投票:1回答:2

我想测试一个组件中的服务是否在调用方法后更新了他的属性。我怎样才能做到这一点?

//.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??     
 }));
angular karma-jasmine
2个回答
1
投票

您不应该测试您的服务是否已更新。您应该测试的是您的服务方法已被调用。

您将测试您的服务已在服务测试中更新。

这是单元测试应该做的:测试一个单元。

如果您测试您的服务已更新,则每次更改服务时都必须更新测试。现在想象这个服务被400个组件使用,你会做什么?编辑所有组件?

只需测试该函数已被调用:

const spy = spyOn(component.myService, 'setAttr');
component.makeSomething(myObj);
expect(spy).toHaveBeenCalledWith(true);
expect(spy).toHaveBeenCalledTimes(1);

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声明中导入您的服务。

© www.soinside.com 2019 - 2024. All rights reserved.