Модульное тестирование Angular с помощью Spectator - неожиданное значение FormBuilder, импортированное модулем DynamicTestModule. Добавьте аннотацию @NgModule
Я хочу использовать 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
});
Когда я запускаю свои тесты, я получаю следующую ошибку:
Ошибка: неожиданное значение FormBuilder импортировано модулем DynamicTestModule. Добавьте аннотацию @NgModule.
Теперь я мог использовать CUSTOM_ELEMENTS_SCHEMA
чтобы предотвратить ошибку, но это кажется неправильным. Может ли кто-нибудь посоветовать мне, как решить мою проблему.
1 ответ
Вы должны поместить ReactiveFormsModule в импорт, как показано ниже:
const createComponent = createComponentFactory({
component: TestComponent,
imports: [ReactiveFormsModule]
});
Думаю, вам не нужен этот импорт: FormBuilder, FormControl, FormGroup, Validators в массиве импорта.