监视函数内部的局部变量

问题描述 投票:0回答:0

我有一个打开对话框然后关闭对话框的方法,它会删除一个已经传递的元素。
我想做的是“监视”afterClosed().subscribe方法,方法:

deleteDialog = MatDialog;
onDeleteElementClicked($event: any, elementName: string): void {
        const dialogRef = this.deleteDialog.open(CustomDialog, {
            data: {
                //SOME DATA
           });

 
        dialogRef.afterClosed().subscribe(result => {
            this.toggleFlagAndCall(result, () => {
                this.deleteElement(this.result.name);
            });
        });
    }

测试:

describe('DeleteComponent', () => {
    let component: DeleteComponent;
    let fixture: ComponentFixture<DeleteComponent>;

    beforeEach(async () => {
        await TestBed.configureTestingModule({
            declarations: [
                DeleteComponent,
            ],
            imports: [
                // some imports
            ],
            providers: [
                { provide: MatDialogRef, useClass: MatDialogRef, useValue: { afterOpen: () => of(true)}},
                { provide: DeleteDialogComponent, useValue: { afterClosed: () => of(true)}},
                { provide: MatDialog, useValue: { afterClosed: () => of(true),
                    open: () => of(true)}},
                }
            ]
        })
            .compileComponents();
    });

    beforeEach(() => {
        fixture = TestBed.createComponent(DeleteComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
    });

    it('should create', () => {
        expect(component).toBeTruthy();
    });

    it('should delete a single element', () => {
        const event = {
            preventDefault: () => {},
            stopPropagation: () => {}
        };

        component.onDeleteElementClicked(event, 'toBeDeletedElement');
        expect(component.elements.length).toBe(0);
    });
});

我得到错误:

TypeError: dialogRef.afterClosed is not a function

但我认为这一行:

{ provide: MatDialog, useValue: { afterClosed: () => of(true),

将为“afterclosed”创建模拟方法并返回一个可观察对象,但它甚至不会被调用。
我怎样才能窥探 dialogRef.afterClosed().?

angular jasmine
© www.soinside.com 2019 - 2024. All rights reserved.