Angular 带观众的角度单元测试-意外值';FormBuilder&x27;由模块导入';DynamicTestModule';。请添加@NgModule注释

Angular 带观众的角度单元测试-意外值';FormBuilder&x27;由模块导入';DynamicTestModule';。请添加@NgModule注释,angular,unit-testing,angular-test,angular-spectator,Angular,Unit Testing,Angular Test,Angular Spectator,我想用它来帮助我进行单元测试,因为我已经读到了很多关于它的东西。但是,我不确定如何解决测试中的问题。在我的组件模板中,我有一个formGroup像这样 <form [formGroup]="emailReportForm" (ngSubmit)="emailReport()"> <!-- Lots more HTML here --> </form> 所以我需要模拟我的服务和导入,这是我的spec.ts文件。。。为了便于阅读,我减少了一些代码: impor

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

<form [formGroup]="emailReportForm" (ngSubmit)="emailReport()">
<!-- Lots more HTML  here -->
</form>
所以我需要模拟我的服务和导入,这是我的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
  });
从“#ng/node_modules/@ngneat/consignator/jest”导入{createComponentFactory,consignator}”;
从“#ng/src/app/common/services/api/api.service”导入{ApiService}”;
从“#ng/node_modules/@angular/material”导入{MAT_DIALOG_DATA,MatDialogRef}”;
从“#ng/node_modules/@angular/forms”导入{FormBuilder、FormControl、FormGroup、Validators、}”;
描述('EmailReportComponent',()=>{
让观众:观众;
常量mockData={};
const dialogMock={close:()=>{};
const createComponent=createComponentFactory({
组件:EmailReportComponent,
进口:[
造模工,
FormControl,
FormGroup,
验证器,
],
组件提供者:[
{provide:ApiService,useValue:{emailReport:jest.fn()},
{提供:MAT_DIALOG_DATA,useValue:mockData},
{提供:MatDialogRef,useValue:dialogMock},
],
});
beforeach(()=>旁观者=createComponent());
描述('方法',()=>{
//测试在这里进行
});
当我运行测试时,出现以下错误:

错误:模块导入了意外值“FormBuilder” “DynamicTestModule”。请添加@NgModule批注


现在我可以使用
CUSTOM\u ELEMENTS\u SCHEMA
来防止错误,但这似乎是错误的。有人能告诉我如何解决我的问题吗。

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

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

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

我不认为FormBuilder、FormControl、FormGroup、Validators是模块。为什么不导入[ReactiveFormsModule、FormsModule]呢?我这样做了,现在它可以工作了
const createComponent = createComponentFactory({
    component: TestComponent,
    imports: [ReactiveFormsModule]
  });