@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();
});
我遇到了一个问题:
TypeError: undefined is not an object (evaluating 's2.name')
这是因为Service2没有被定义。
之前使用addProviders和provide时,同样的代码是可以工作的。
beforeEach(() => {
addProviders([
provide(Service1, {useClass: MockService1 } ),
provide(Service2, {useClass: MockService2 } ),
]);
});
这两个测试在去掉console.log( s2.name )后通过了。有什么想法吗?
@Inject(...)
而不是$Inject(...)
,如果你需要@Inject(xxx)
,其中xxx
与参数类型相同,则可能存在其他问题。 - Günter Zöchbauer