#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, если оно открыто.