Angular APP_INITIALIZER在测试中加载配置文件

Yog*_*dra 7 angular

我正在使用此要点在应用程序启动期间读取配置文件.这工作正常但在进行单元测试时我得到错误Cannot read property 'SomeProperty' of null.

我已经添加了提供程序以进行测试

beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ LoginComponent ],
      imports: [ReactiveFormsModule, RouterTestingModule, HttpModule],
      providers: [AuthService,
        SettingsService,
        AppConfig,
        {
            provide: APP_INITIALIZER,
            useFactory: initConfig,
            deps: [AppConfig],
            multi: true
        },
        ]
    })
    .compileComponents();
  }));
Run Code Online (Sandbox Code Playgroud)

任何指针来解决这个问题?提前致谢.

Roc*_*Man 6

看起来 Angular 在运行测试时如何处理 APP_INITIALIZER 存在问题(请参阅https://github.com/angular/angular/issues/24218)。

现在的解决方法是在每个之前调用它:测试

  beforeEach(async () => {
    // until https://github.com/angular/angular/issues/24218 is fixed
    await TestBed.inject(ApplicationInitStatus).donePromise;
  });
Run Code Online (Sandbox Code Playgroud)

对于角度 <9,请使用 TestBed.get(...) 代替。


小智 1

我在这样的事情上旋转了一段时间。最后,我只是在 APP_INITIALIZER 提供程序的“deps”中提供了服务的模拟,并确保它在单元测试中没有执行任何操作。

然后,您只需独立测试初始化​​程序和服务,我认为这是您能做的最好的事情。