Как проверить, открыто ли диалоговое окно Angular Material

#angular #angular-material #angular-test

#angular #angular-материал #angular-тест

Вопрос:

Я пишу модульный тест, чтобы проверить, открыл ли вызов функции элемент диалогового окна материала. Я получаю False, тогда как ожидаемый результат равен True. Функция компонента:

x.component.ts

 openCartDialog(): void {
        this.dialog.open(CartComponent);
        this.isCartDialogOpen = true;
}
  

И мой файл x.component.spec.ts содержит следующий код и тест:

 export class DialogMock {
    open(): void {
        return;
    }
}

beforeEach(async(() => {

    TestBed.configureTestingModule({
        declarations: [MainPageComponent, CartComponent, ConfirmButtonComponent],
        imports: [RouterTestingModule, HttpClientModule, MatTabsModule, MatDialogModule],
        providers: [
            { provider: MatDialog, useClass: DialogMock },
        ],
    }).compileComponents();
}));

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


it('should open the cart dialog', () => {
       component.openCartDialog();
       expect(component.isCartDialogOpen).toBeTrue();
});
  

Я думаю, что проблема заключается в моем beforeEach(), где CartComponent не создан должным образом. Компонент Cart также использует другие компоненты в своем шаблоне…Я включил только ConfirmButtonComponent в этот код, но есть и другие.

Спасибо за вашу помощь!

Комментарии:

1. Возможно, ошибка возникает из component.isUserGuideOpen -за того, что в нем должно быть component.isCartDialogOpen

2. Я допустил опечатку, скопировав свой код в Stack overflow. Обе переменные имеют одинаковое имя

3. Я думаю, что тестирование, если компонент вызывает dialog.open(), является лучшим способом тестирования, а затем на самом деле тестирует диалоговое окно if. открыть фактически открыл диалоговое окно, таким образом, вы тестируете этот класс независимо от других классов. Вы можете издеваться / шпионить за диалогом. откройте и проверьте, был ли он вызван / вызван с параметрами и т. Д.

4. Это имеет большое значение, спасибо. Это также упрощает другие тесты, которые у меня есть.

5. Открытие диалогового окна возвращает ссылку на диалоговое окно. Сохраните это где-нибудь и вызовите диалоговое getState() окно, которое принимает значение true, если оно открыто.