测试服务 - 如何只注入一次测试服务
Testing a service - how to inject tested service only once
it('should ...', inject([XService], (service: XService) => {
expect(service).toBeTruthy();
}));
这样我就可以在 'it' 中使用服务了。还有很多'it'不想每次都注入服务。我想在开始的某个地方注入一次服务(例如在 beforeEach 中),但我不能。 xService 在构造函数中有很多依赖项,我也想得到。
我能做到这一点的唯一方法是在第一个 'it'.
中设置所有这些值
let xService: XService;
let yService: YService;
let zService: ZService;
beforeEach(() => ...);
it('should ...', inject([XService], (service: XService) => {
xService = service;
yService = xService['yService'];
zService = xService['zService'];
expect(xService).toBeTruthy();
}));
但我个人认为这是一个丑陋的解决方案。我可以通过某种方式将它移动到 beforeEach 吗?
尝试使用 TestBed.get()
而不是 inject
。基本上是一样的功能,用它就可以轻松解决你的问题:
let xService: XService;
let yService: YService;
let zService: ZService;
beforeEach( () => {
TestBed.configureTestingModule( ... ).compileComponents();
xService = TestBed.get( XService );
yService = TestBed.get( YService );
zService = TestBed.get( ZService );
} );
it( 'should ...',() => {
expect( xService instanceof XService ).toBe( true );
} );
it('should ...', inject([XService], (service: XService) => {
expect(service).toBeTruthy();
}));
这样我就可以在 'it' 中使用服务了。还有很多'it'不想每次都注入服务。我想在开始的某个地方注入一次服务(例如在 beforeEach 中),但我不能。 xService 在构造函数中有很多依赖项,我也想得到。
我能做到这一点的唯一方法是在第一个 'it'.
中设置所有这些值let xService: XService;
let yService: YService;
let zService: ZService;
beforeEach(() => ...);
it('should ...', inject([XService], (service: XService) => {
xService = service;
yService = xService['yService'];
zService = xService['zService'];
expect(xService).toBeTruthy();
}));
但我个人认为这是一个丑陋的解决方案。我可以通过某种方式将它移动到 beforeEach 吗?
尝试使用 TestBed.get()
而不是 inject
。基本上是一样的功能,用它就可以轻松解决你的问题:
let xService: XService;
let yService: YService;
let zService: ZService;
beforeEach( () => {
TestBed.configureTestingModule( ... ).compileComponents();
xService = TestBed.get( XService );
yService = TestBed.get( YService );
zService = TestBed.get( ZService );
} );
it( 'should ...',() => {
expect( xService instanceof XService ).toBe( true );
} );