0

在我们的应用程序中,我们使用专门的服务来展示零食,以便在必要时能够重新打开已关闭的零食。为服务的一项功能编写单元测试时,出现以下错误:

No component factory found for GsSnackComponent. Did you add it to @NgModule.entryComponents?

GsSnackComponent没有定义EntryComponentin,因为SharedModule在我们的 Angular 版本中它不是必需的(项目从版本 9 开始,最近更新到 12)。我认为在测试配置中声明它就足够了。但显然不是。我们正在使用 Jest 和 Spectator 的组合,失败的单元测试看起来像这样。

import { MockComponent } from 'ng-mocks';

describe('SnackService', () => {
  let spectator: SpectatorService<SnackService>;
  const createService = createServiceFactory<SnackService>({
    service: SnackService,
    declarations: [MockComponent(GsSnackComponent)],
    entryComponents: [GsSnackComponent],
  });

  beforeEach(() => {
    spectator = createService();
  });

  test('should push timed snack', () => {
    const snackId = spectator.service.pushTimedSnack('mockMessage', 1); // Fails
    // ...
  });
});

我们要测试的功能:

// test for this function fails. Since no custom Snack Component is used,
// the default GsSnackComponent is passed to pushSnackComponent()
pushTimedSnack(message: string, id?: number): number {
  return this.pushSnackComponent(GsSnackComponent, { message, hasTimeout: true }, id);
}

// calls this function
pushSnackComponent(component: ComponentType<any>, data?: AnyGsSnackProperties, id?: number): number {
  // ...
  return snackId;
}

知道还能做什么吗?

4

0 回答 0