2016-03-25 120 views
0

我试着写一些单元测试像一个服务:angular2单元测试

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

其中服务2包含反过来,服务3:

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什么HAPP恩与此:

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). 

能someboby帮助我吗?

在此先感谢。

回答

0

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

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

由于事实上,注射默认依赖于参数类型,如果你不使用装饰者@Inject

+0

我已经在构造函数中使用了@Inject装饰器,但不是在模拟服务中!真的非常感谢你! – AntuJitsu