在我们的应用程序中,我们使用专门的服务来展示零食,以便在必要时能够重新打开已关闭的零食。为服务的一项功能编写单元测试时,出现以下错误:
No component factory found for GsSnackComponent. Did you add it to @NgModule.entryComponents?
GsSnackComponent
没有定义为EntryComponent
in,因为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;
}
知道还能做什么吗?