【问题标题】:angular2 unit test of nested services嵌套服务的angular2单元测试
【发布时间】:2016-03-25 08:42:06
【问题描述】:

我正在尝试为以下服务编写一些单元测试:

export class Service1 {
...
    public constructor(service2: Service2, service3: Service3) {}
...
}

其中 Service2 又包含 Service3:

export class Service2 {
...
    public constructor(service3: Service3, stringa: string) {}
...
}

我开始测试 以一种非常糟糕的方式,例如:

 it("check XXX", () => {
   let service3: Service3= new Service3();
   let service2: service2= new service2(service3, "stringa");
   let service1: Service1 = new Service1(service2, service3);
   expect(X).toEqual(X);
 });

但现在,我正在使用 beforeEachProviders 以及这会发生什么:

  beforeEachProviders(() => {
    return [
      provide(Service2, { useclass: MockService2}),
      provide(Service3, { useclass: MockService3}),
      provide('stringa', { useValue: "stringa"}),
      Service1
    ];
  });

  it('check XXX ', inject(
  [Service2, Service3], (service2: Service2, service3: Service3) => {
    expect(true).toEqual(true);
  }));

是:

  Failed: No provider for String! (Service2-> String).

有人能帮帮我吗?

提前致谢。

【问题讨论】:

    标签: service angular code-injection provider


    【解决方案1】:

    如果要从依赖注入中注入字符串值,需要使用@Inject装饰器:

    export class Service2 {
      ...
      public constructor(service3: Service3, @Inject('stringa') stringa: string) {}
      ...
    }
    

    事实上,如果你不使用@Inject装饰器,注入默认依赖参数类型。

    【讨论】:

    • 我已经在构造函数中使用了 @Inject 装饰器,但在 Mock 服务中没有!真的谢谢你!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2016-12-14
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多