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

标签 angular

我正在使用这个 gist在应用程序启动期间读取配置文件。这工作正常,但在进行单元测试时出现错误 Cannot read property 'SomeProperty' of null

我也添加了provider来测试

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

有解决这个问题的建议吗?提前致谢。

最佳答案

看起来 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;
  });

对于 Angular <9,请改用 TestBed.get(...)。

关于Angular APP_INITIALIZER 在测试中加载配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43841808/

相关文章:

html - HTML5 模式下的 NGINX、proxy_pass 和 SPA 路由

html - 使用来自 API 调用的数据在子组件中设置 HTML 选择的默认值

javascript - Instagram API : how to catch access_token in Angular 2/4/5

angular - 首次单击 Rxjs 时未将值发送到 Angular 中的其他组件

angular - 我可以创建一个在特定条件下不呈现的 Angular 组件吗?

javascript - 无法使用此嵌套对象数组创建响应式(Reactive)表单

javascript - 如何在angular4中设置下拉值?

javascript - 有没有办法在 Angular 项目中通过智能感知从库中显示函数注释?

Angular 6 - HttpClient 保持订阅服务但将结果传递给组件

Angular 5事件发射器触发两次