测试服务 - 如何只注入一次测试服务

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

} );