简体   繁体   English

Angular 2 rc5,与服务的单元测试问题

[英]Angular 2 rc5 , unit testing issue with services

@Injectable()
export class Service1 {
    constructor( private s2 : Service2 ) { 
        console.log( s2.name );
     }
}

@Injectable()
export class Service2 {
    public name: string = 'Hi';
}


//------------Test-------------

let service1: MockService1;  // MockService1 extends Service1
let service2: MockService2;  // MockService2 extends Service2

beforeEach(() => {
    TestBed.configureTestingModule({
        providers: [
            { provide: Service1, useClass: MockService1 },
            { provide: Service2, useClass: MockService2 }
        ]
    })
});  

beforeEach(inject( [ Service1 , Service2 ], ( s1: MokcService1 , s2: MockService2  ) => { 
    service1 = s1;
    service2 = s2; 
}));

it('should be defined ', () => {
    expect( service1 ).toBeDefined(); 
    expect( service2 ).toBeDefined();
});

I'm getting 我越来越

TypeError: undefined is not an object (evaluating 's2.name') TypeError:undefined不是对象(评估's2.name')

because Service2 is undefined. 因为Service2未定义。

The same code worked earlier with addProviders and provide 相同的代码早先使用addProviders并提供

beforeEach(() => {
    addProviders([
        provide(Service1, {useClass: MockService1 } ),
        provide(Service2, {useClass: MockService2 } ),
    ]);
});         

Those 2 tests are passing when console.log( s2.name ) is removed 当删除console.log(s2.name)时,这两个测试正在通过

Any Idea? 任何想法?

Use @Inject when injecting the service in the constructor, 在构造函数中注入服务时使用@Inject,

Example: 例:

constructor( @Inject(Service2) private s2 : Service2 ) { 
    console.log( s2.name );
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM