我正在尝试为一个Angular组件编写一个基本的单元测试,它被用作子组件,并通过一个Input()从其父组件接收一个反应式表单。我正在尝试使用主机组件编写单元测试,以包装要测试的组件。我使用https://netbasal.gitbook.io/spectator/和Jest来编写我的测试。我不能让这个组件的最简单的测试工作,我猜问题与依赖有关。我已经在谷歌上搜索了很久,但我似乎找不到其他人遇到这个错误。
我试着在没有主机组件的情况下编写测试,但似乎也不起作用。
describe('ProjectFormComponent', () => {
let host: SpectatorWithHost<ProjectFormComponent>;
const createHost = createHostComponentFactory<ProjectFormComponent>({
component: ProjectFormComponent,
imports: [
CommonModule,
ReactiveFormsModule,
FontAwesomeModule,
HttpClientTestingModule,
RouterTestingModule,
NgxErrorsModule,
NgSelectModule,
ToastrModule.forRoot(),
MaterialImportsModule,
FormsModule,
SharedModule
],
providers: [
{ provide: NgxErrorDirective, useValue: {} },
{ provide: APP_BASE_HREF, useValue: '/' },
{ provide: Store, useValue: {} },
{ provide: MAT_DATE_LOCALE, useValue: 'en-GB' },
{ provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },
{ provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS }
]
});
test('ProjectFormComponent is created', inject([FormBuilder], (fb: FormBuilder) => {
const mockForm = fb.group({
name: ['', [Validators.required, Validators.maxLength(255)]]
});
host = createHost(`<app-project-form></app-project-form>`, false, { parent_form: mockForm });
expect(host.component).toBeTruthy();
}));
});这是一个简单的测试,结果应该是阳性的。但是当我运行ng test时,我得到一个错误:当测试模块已经被实例化时,无法覆盖模块元数据。确保您在使用overrideModule之前没有使用inject。
发布于 2019-05-28 04:40:00
为了避免重复相同的答案,
https://github.com/NetanelBasal/spectator/issues/57
https://github.com/NetanelBasal/spectator/issues/39
https://github.com/NetanelBasal/spectator
我认为你可以从类似的问题中受益,如下所示:
1)Angular2 RC5 how to properly configure test module
2)angular Testbed overrideModule not working
也是一个很好的https://codecraft.tv/courses/angular/unit-testing/dependency-injection/读物
希望这能有所帮助
https://stackoverflow.com/questions/56329225
复制相似问题