【问题标题】:How to create unit test for MatDialog如何为 MatDialog 创建单元测试
【发布时间】:2019-01-16 23:35:15
【问题描述】:

如何为以下角码创建单元测试:

提前致谢

export class CancelGroup1PolicyDialogComponent implements OnInit {
  [x: string]: any;

  constructor(public dialog: MatDialog, public dialogRef: MatDialogRef<CancelGroup1PolicyDialogComponent>,
    @Inject(MAT_DIALOG_DATA) public data: any, private policyEnquiryService: PolicyEnquiryService) { }

  ngOnInit() {

  }

  openCancelDetailsDialog(policyResult: IPolicyResult): void {
    const dialogRef = this.dialog.open(CancelGroup1DetailsDialogComponent, {
      data: {
        policyResult
      }
    });

    dialogRef.afterClosed().subscribe(result => {
      if (result) {
        this.dialogRef.close(result);
       } else {
        this.dialogRef.close();
       }

    });
  }
}

根据 Stackoverflow 的要求添加更多详细信息。

【问题讨论】:

    标签: angular karma-jasmine


    【解决方案1】:

    您可以尝试以下方法:

    it('should show Cancel Details Dialog', async(() => {
        component.openCancelDetailsDialog(policyResult);
        fixture.detectChanges();
        fixture.whenStable().then(() => {
    
            let dialogBox: HTMLCollectionOf<Element> = document.getElementsByClassName('.class-name-available-on-dialog');
            expect(dialogBox).not.toBeNull();
    
            let restoreText = dialogBox[1].querySelector('.your-dialog-content-class').innerHTML;
            expect(restoreText.toUpperCase()).toContain('your text here');
        });
    
    }));
    

    编辑:

    你也可以尝试如下:

    describe('Dialog Test', () => {
        let component: CancelGroup1PolicyDialogComponent;
        let fixture: ComponentFixture<CancelGroup1PolicyDialogComponent>;
    
        beforeEach(() => {
            TestBed.configureTestingModule({
                imports: [
                    TestModule
                ],
                providers: [],
            });
        });
    
        beforeEach(() => {
            fixture = TestBed.createComponent(CancelGroup1PolicyDialogComponent);
            component = fixture.componentInstance;
    
        });
    
    
        it('should show Cancel Details Dialog', async(() => {
            component.openCancelDetailsDialog(policyResult);
            fixture.detectChanges();
            fixture.whenStable().then(() => {
    
                let dialogBox: HTMLCollectionOf<Element> = document.getElementsByClassName('.class-name-available-on-dialog');
                expect(dialogBox).not.toBeNull();
    
                let restoreText = dialogBox[1].querySelector('.your-dialog-content-class').innerHTML;
                expect(restoreText.toUpperCase()).toContain('your text here');
            });
    
        }));
    });
    
    @NgModule({
        imports: [],
        declarations: [],
        entryComponents: [
            CancelGroup1DetailsDialogComponent,
        ],
    })
    class TestModule {
    }
    

    【讨论】:

    • 嗨 Rakesh,我收到以下错误:失败:未找到 CancelGroup1DetailsDialogComponent 的组件工厂。你把它添加到@NgModule.entryComponents 了吗?
    • 是的,需要添加到entryComponents中
    • 收到新错误后,我继续调查:无法绑定到“线性”,因为它不是“垫子水平步进器”的已知属性
    • 这是新错误 -> 失败:无法读取未定义的属性“openCancelDetailsDialog”
    • 您是否创建了组件?更新了上面的代码来创建一个组件实例。
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    相关资源
    最近更新 更多