gpt4 book ai didi

使用 Spectator 进行 Angular 单元测试 - 模块 'FormBuilder' 导入的意外值 'DynamicTestModule'。请添加@NgModule 注释

转载 作者:行者123 更新时间:2023-12-04 14:17:11 26 4
gpt4 key购买 nike

我想用spectator帮助我进行单元测试,因为我已经阅读了很多关于它的东西。但是,我不确定如何解决我的测试问题。在我的组件模板中,我有一个 formGroup像这样...

<form [formGroup]="emailReportForm" (ngSubmit)="emailReport()">
<!-- Lots more HTML here -->
</form>

在我的 TS 文件中,我的 ngOnInit 中有以下内容/ constructor ...
constructor(@Inject(MAT_DIALOG_DATA) data: any,
private formBuilder: FormBuilder,
private apiService: ApiService,
public dialogRef: MatDialogRef<EmailReportComponent>) {
this.data = data;
}

ngOnInit(): void {
this.emailReportForm = this.formBuilder.group({
emailAddress: new FormControl(null, [
Validators.required,
Validators.pattern('^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$')
]),
updateOn: 'keyup'
});
}

所以我需要模拟我的服务和导入,所以这是我的 spec.ts 文件......我减少了一些代码以提高可读性:
import { createComponentFactory, Spectator } from '#ng/node_modules/@ngneat/spectator/jest';
import { ApiService } from '#ng/src/app/common/services/api/api.service';
import { MAT_DIALOG_DATA, MatDialogRef } from '#ng/node_modules/@angular/material';
import { FormBuilder, FormControl, FormGroup, Validators,} from '#ng/node_modules/@angular/forms';

describe('EmailReportComponent', () => {
let spectator: Spectator<EmailReportComponent>;
const mockData = { };
const dialogMock = { close: () => { } };

const createComponent = createComponentFactory({
component: EmailReportComponent,
imports: [
FormBuilder,
FormControl,
FormGroup,
Validators,
],
componentProviders: [
{ provide: ApiService, useValue: { emailReport: jest.fn() } },
{ provide: MAT_DIALOG_DATA, useValue: mockData },
{ provide: MatDialogRef, useValue: dialogMock },
],
});

beforeEach(() => spectator = createComponent());
describe('Methods', () => {
// tests go here
});

当我运行我的测试时,我收到以下错误:

Error: Unexpected value 'FormBuilder' imported by the module 'DynamicTestModule'. Please add a @NgModule annotation.



现在我可以使用 CUSTOM_ELEMENTS_SCHEMA以防止错误,但这似乎是错误的。任何人都可以请告诉我如何解决我的问题。

最佳答案

您应该将 ReactiveFormsModule 放入导入中,如下所示:

const createComponent = createComponentFactory({
component: TestComponent,
imports: [ReactiveFormsModule]
});

我认为,您不需要在导入数组中导入:FormBuilder、FormControl、FormGroup、Validators。

关于使用 Spectator 进行 Angular 单元测试 - 模块 'FormBuilder' 导入的意外值 'DynamicTestModule'。请添加@NgModule 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59068035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com