I'm having Dialog Service for open, confirm and close the dialog and I am making its unit test file but I got an error wail testing the bellow method on Angular and this is the code.
dialog.service.ts
@Injectable({
providedIn: 'root'
})
export class DialogService {
public genericDialogRef?: MatDialogRef<GenericDialogComponent>;
constructor(
private dialog: MatDialog,
private toastr: ToastrService,
private translateService: TranslateService
) { }
public openGenericDialog(options: GenericDialogOptions) {
const filledInConfig: Required<GenericDialogOptions> = { ...defaultValues, ...options };
this.genericDialogRef = this.dialog.open(GenericDialogComponent, {
data: filledInConfig
});
}
public genericDialogClosed(): Observable<boolean> {
if (!this.genericDialogRef)
throw Error("Dialog ref wasn't initialized! Call open first");
return this.genericDialogRef.afterClosed().pipe(take(1));
}
}
dialog.service.spec.ts
describe('DialogService', () => {
let service: DialogService;
let matDialogMock = jasmine.createSpyObj(['open']);
let toastrServiceMock = {};
let dialog: any;
let translateService: TranslateService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [TranslateModule.forRoot()],
providers: [
{ provide: MatDialog, useValue: matDialogMock },
{ provide: ToastrService, useValue: toastrServiceMock },
],
});
service = TestBed.inject(DialogService);
dialog = TestBed.inject(MatDialog);
translateService = TestBed.inject(TranslateService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should close generic Dialog', fakeAsync(() => {
service.genericDialogClosed().subscribe(() => {
expect(service.genericDialogRef?.afterClosed).toHaveBeenCalled();
});
tick();
}));
});
Here is the error:
could you please help me to fix this issue?
Edit: The below test works fine:
it('should close generic Dialog', () => {
service.genericDialogRef = {
afterClosed: () => of(true)
} as MatDialogRef<GenericDialogComponent>;
service.genericDialogClosed()
});