import {Component, TemplateRef, ViewChild, inject} from '@angular/core'; import {ComponentFixture, TestBed} from '@angular/core/testing'; import {HarnessLoader} from '@angular/cdk/testing'; import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed'; import { MatBottomSheet, MatBottomSheetConfig, MatBottomSheetModule, } from '@angular/material/bottom-sheet'; import {NoopAnimationsModule} from '@angular/platform-browser/animations'; import {MatBottomSheetHarness} from './bottom-sheet-harness'; describe('MatBottomSheetHarness', () => { let fixture: ComponentFixture; let loader: HarnessLoader; beforeEach(() => { TestBed.configureTestingModule({ imports: [MatBottomSheetModule, NoopAnimationsModule, BottomSheetHarnessTest], }); fixture = TestBed.createComponent(BottomSheetHarnessTest); fixture.detectChanges(); loader = TestbedHarnessEnvironment.documentRootLoader(fixture); }); it('should load harness for a bottom sheet', async () => { fixture.componentInstance.open(); const bottomSheets = await loader.getAllHarnesses(MatBottomSheetHarness); expect(bottomSheets.length).toBe(1); }); it('should be able to get aria-label of the bottom sheet', async () => { fixture.componentInstance.open({ariaLabel: 'Confirm purchase.'}); const bottomSheet = await loader.getHarness(MatBottomSheetHarness); expect(await bottomSheet.getAriaLabel()).toBe('Confirm purchase.'); }); it('should be able to dismiss the bottom sheet', async () => { fixture.componentInstance.open(); let bottomSheets = await loader.getAllHarnesses(MatBottomSheetHarness); expect(bottomSheets.length).toBe(1); await bottomSheets[0].dismiss(); bottomSheets = await loader.getAllHarnesses(MatBottomSheetHarness); expect(bottomSheets.length).toBe(0); }); }); @Component({ template: ` Hello from the bottom sheet! `, standalone: true, imports: [MatBottomSheetModule], }) class BottomSheetHarnessTest { readonly bottomSheet = inject(MatBottomSheet); @ViewChild(TemplateRef) template: TemplateRef; open(config?: MatBottomSheetConfig) { return this.bottomSheet.open(this.template, config); } }