Angular: How to mock MatDialogRef while testing

前端 未结 4 2260
隐瞒了意图╮
隐瞒了意图╮ 2021-02-18 13:56

I have a DialogComponent that has the following constructor where Dialog is a custom object:

constructor(
    public dialogRef: MatDialogRef

        
4条回答
  •  暖寄归人
    2021-02-18 14:32

    To solve this problem, you can do the following steps:

    1- You used the data as input to the dialog and used it in the constructor to set the variables. (in .ts)

      constructor(public dialogRef: MatDialogRef,
              @Inject(MAT_DIALOG_DATA) public data: any) {
         this.ip= data.ip;
         this.name= data.name;
      }
    

    2- We should create fake data, (in .spec.ts)

    const data = {
        ip: '1.1.1.1',
        name: 'test'
     }
    

    3- We define provider as follows And we introduce data, (in .spec.ts)

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

    4- full code in .spec.ts

    import {async, ComponentFixture, TestBed} from '@angular/core/testing';
    
    import {CustomDialogComponent} from './backup-list.component';
    import {TranslateModule} from '@ngx-translate/core';
    import {MAT_DIALOG_DATA, MatDialogModule, MatDialogRef} from '@angular/material';
    import {BrowserDynamicTestingModule} from '@angular/platform-browser-dynamic/testing';
    import {NO_ERRORS_SCHEMA} from '@angular/core';
    
    const data = {
        ip: '1.1.1.1',
        name: 'test'
     };
    
    describe('BackupListComponent', () => {
       let component: BackupListComponent;
       let fixture: ComponentFixture;
    
        beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [CustomDialogComponent],
            imports: [
                TranslateModule.forRoot(),
                MatDialogModule,
                BrowserDynamicTestingModule
            ],
            providers: [
                {provide: MatDialogRef, useValue: {}},
                {provide: MAT_DIALOG_DATA, useValue: data},
            ],
            schemas: [NO_ERRORS_SCHEMA]
        })
            .compileComponents();
      }));
     });
    

提交回复
热议问题