测试服务 - 如何仅测试一次测试服务

时间:2017-04-28 09:12:08

标签: angular jasmine karma-runner

  it('should ...', inject([XService], (service: XService) => {
    expect(service).toBeTruthy();
  }));

这样我可以在'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之前吗?

1 个答案:

答案 0 :(得分:2)

而不是inject,请尝试使用TestBed.get()。它的功能基本相同,您的问题可以轻松解决:

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

} );