Angular2模拟可注入服务

Angular2 mocking injectable service

我使用Angular 2 Karma-Jasmine。 我有服务,

it("test", () => {
    let x:any = function1('value', aService);
    expect(x).toEqual("value1");
});

现在AServicegetA()方法,function1使用getA()方法。 我想要模拟 AService.getA 方法?

请告诉我模拟的最佳方法 AService ?

如果function的签名接受AService类型

function1(value, service: AService) {}

然后您需要确保模拟与 AService 兼容。如果AService只有一个方法getA,那么你真的只需要做

let mockA = {
  getA: () => {
    // mock implementation
  }
}

如果 AService 有比 getA 更多的方法,而你不想实现它,那么你可以 "cast" 模拟输入 AService.

let mock = <AService>{ same as above }

或者如果 function1 参数没有输入 AService,那么你真的可以传递任何东西给它。

另请参阅:

  • 解释了 TypeScript 的结构类型系统