• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

1.6K
Views
Angular: cómo burlarse de MatDialogRef durante la prueba

Tengo un DialogComponent que tiene el siguiente constructor donde Dialog es un objeto personalizado:

 constructor( public dialogRef: MatDialogRef<CustomDialogComponent>, @Inject(MAT_DIALOG_DATA) public data: Dialog )

Creé el siguiente TestBed en Angular4:

 data = new Dialog() data.message = 'Dialog Message' TestBed.configureTestingModule({ imports: [MaterialModules], declarations: [CustomDialogComponent], providers: [MatDialogRef, { provide: Dialog, useValue: data }] }) TestBed.overrideModule(BrowserDynamicTestingModule, { set: { entryComponents: [CustomDialogComponent] } }) await TestBed.compileComponents()

Pero me sale el siguiente error:

 Failed: Can't resolve all parameters for MatDialogRef: (?, ?, ?). Error: Can't resolve all parameters for MatDialogRef: (?, ?, ?).

cambiar de proveedor a:

 providers: [ { provide: MatDialogRef, useValue: {} }, { provide: MAT_DIALOG_DATA, useValue: data } ]

da como resultado el siguiente error:

 Error: No provider for Dialog!

¿Cómo resuelvo esto?

about 3 years ago · Santiago Trujillo
3 answers
Answer question

0

Lo resolví cambiando el constructor del componente a:

 constructor( public dialogRef: MatDialogRef<CustomDialogComponent>, @Inject(MAT_DIALOG_DATA) public data: Dialog | any )

Los proveedores en TestBed fueron:

 providers: [{ provide: MatDialogRef, useValue: {} }, { provide: MAT_DIALOG_DATA, useValue: data }]
about 3 years ago · Santiago Trujillo Report

0

Si usa al menos un método MatDialogRef , debe crear un simulacro. Por ejemplo, uso el método close() . Sin él, se generarían errores, así que hice la siguiente clase con un método vacío.

 export class MatDialogRefMock { close(value = '') { } }

y use eso en lugar de un valor vacío, con useClass

 { provide: MatDialogRef, useClass: MatDialogRefMock },
about 3 years ago · Santiago Trujillo Report

0

Importe MatDialogModule y MatDialogRef desde angular/material/dialog en lugar de angular/material. Importe ModalDialogModule y proporcione proveedores para MatDialogRef en su TestBed.

 Import {MatdialogModule,MatDialogRef} from '@angular/material/dialog'; TestBed.configureTestingModule({ declarations: [componentName], imports: [MatdialogModule], providers: [{provide : MatDialogRef, useValue : {}}] });
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error