Angular 测试 NavigationError 事件处理程序

Angular test NavigationError event handler

我有一个方法可以处理块加载错误并显示通知。问题是我无法模拟 NavigationError 以通过过滤条件 filter((e) => e instanceof NavigationError && e.error.name === 'ChunkLoadError').

但是,我无法自行创建此错误。当我创建 NavigationError 实例时,出现

错误

Error: ASSERTION ERROR: NgModule 'NavigationError(id: 1, url: '1', error: 1)' is not a subtype of 'NgModuleType'. [Expected=> null != null <=Actual]

RouterTestingModule.withRoutes([
{
   path: 'loadErr',
   loadChildren: () =>Promise.resolve(new NavigationError(1, '1', 1)),
},
]),

如何创建此错误的实例?

您似乎不需要显式创建 NavigationError。您可以拒绝将自动导致 NavigationError.

的承诺

现在路由设置如下所示

RouterTestingModule.withRoutes([
  {
    path: 'loadErr',
    loadChildren: () =>
      Promise.reject({name: 'ChunkLoadError'}),
  },
]),

以及测试本身

ngZone
  .run(() => router.navigateByUrl('loadErr'))
  .then(() => done.fail('Eror expected'))
  .catch(() => expect(notificationService.showError).toHaveBeenCalled());

  tick(100);