【问题标题】:Angular2 mocking injectable serviceAngular2模拟可注入服务
【发布时间】:2016-10-04 19:22:48
【问题描述】:

我使用 Angular 2 Karma-Jasmine。 我有 AService,

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

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

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

【问题讨论】:

  • 您是否在测试中使用依赖注入?请提供一个更大的例子。
  • 我还没有死 @Supamiu 的例子,我想学习在 angular2-jasmine-karma 中模拟的最佳方法。我的function1是静态的,通过AServcie,没有注入。

标签: angular mocking jasmine karma-jasmine angular2-testing


【解决方案1】:

如果function的签名是接受AService类型

function1(value, service: AService) {}

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

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

如果AService 有更多的方法,而不仅仅是getA,并且您不想实现它,那么您可以将模拟“强制转换”为类型AService

let mock = <AService>{ same as above }

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

另见

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

【讨论】:

  • 我的 AService 还有其他方法。这种情况下怎么办?请编辑该案例的答案。
  • 谢谢,这可能是模拟的最佳解决方案?
  • 我不知道最佳解决方案,但我一直这样做。
  • 谢谢,最后一个问题——我的 getA() 有返回类型,我必须把它放在哪里? let mockA = { getA: () => { // 模拟实现 } }
  • getA: (): ReturnType =&gt; {}。虽然大多数时候 TypeScript 可以通过你在方法体中返回的内容来判断它。
猜你喜欢
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 2017-03-14
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
相关资源
最近更新 更多