angular - Error: mat-form-field debe contener un MatFormFieldControl
Actualmente estoy analizando más a fondo algunas de las advertencias que estoy recibiendo en mis pruebas de Jasmine/Karma y cuando intenté agregar MatFormFieldModule y MatInputModule de la siguiente manera:
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar } from '@angular/material/snack-bar';
import { UserApiService } from 'src/app/services/api/user-apiservice';
import { InitService } from 'src/app/services/tops/initializer.service';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input'
import { AddUserComponent } from './adduser.component';
describe('AddUserComponent', () => {
let component: AddUserComponent;
let fixture: ComponentFixture<AddUserComponent>;
let mockMatDialogRef, mockTlsApiService, mockInitService, mockMatDialog, mockMatSnackBar, mockMAT_DIALOG_DATA;
beforeEach(async(() => {
mockInitService = jasmine.createSpyObj(['Roles']);
TestBed.configureTestingModule({
declarations: [ AddUserComponent ],
providers: [
{provide: MatDialogRef, useValue: mockMatDialogRef},
{provide: UserApiService, useValue: mockTlsApiService},
{provide: InitService, useValue: mockInitService},
{provide: MatDialog, useValue: mockMatDialog},
{provide: MatSnackBar, useValue: mockMatSnackBar}
],
imports: [
MatFormFieldModule, MatInputModule
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AddUserComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
Mi caso de prueba me está dando el mensaje de error en el título de la publicación sobre este html, lo sé porque cuando comento este bloque el error desaparece.
<mat-form-field appearance="fill">
<mat-label>Search for Either: First Name and/or Last Name, or ID</mat-label>
<input matInput (keyup)="search($event.target.value)" placeholder="Search for Either: First Name and/or Last Name, or ID">
</mat-form-field>
Basándome en una publicación que encontré en Stack Overflow, cambié la etiqueta input a esto
<input matInput (keyup)="search($event.target.value)" placeholder="Search for Either: First Name and/or Last Name, or ID" />
Pero incluso después de hacer eso, sigo teniendo el mismo error. ¿Hay algo más que me esté perdiendo?
Respuesta #1
Puede estar relacionado con otro componente de Angular Material que estás usando en tu aplicación. Importar MatSelectModule funcionó para mí.
import { MatSelectModule } from '@angular/material/select';
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ YourComponent ],
imports: [
...,
MatSelectModule
]
})
.compileComponents();
});
