Skip to content

Commit f823198

Browse files
authored
docs(material/menu): add harness example for menu (#21451)
1 parent 47fa75c commit f823198

File tree

5 files changed

+93
-0
lines changed

5 files changed

+93
-0
lines changed

src/components-examples/material/menu/BUILD.bazel

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,16 @@ ng_module(
1111
]),
1212
module_name = "@angular/components-examples/material/menu",
1313
deps = [
14+
"//src/cdk/overlay",
15+
"//src/cdk/testing",
16+
"//src/cdk/testing/testbed",
1417
"//src/material/button",
1518
"//src/material/icon",
1619
"//src/material/menu",
20+
"//src/material/menu/testing",
21+
"@npm//@angular/platform-browser",
22+
"@npm//@angular/platform-browser-dynamic",
23+
"@npm//@types/jasmine",
1724
],
1825
)
1926

src/components-examples/material/menu/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@ import {MenuIconsExample} from './menu-icons/menu-icons-example';
66
import {MenuOverviewExample} from './menu-overview/menu-overview-example';
77
import {MenuPositionExample} from './menu-position/menu-position-example';
88
import {MenuNestedExample} from './menu-nested/menu-nested-example';
9+
import {MenuHarnessExample} from './menu-harness/menu-harness-example';
910

1011
export {
12+
MenuHarnessExample,
1113
MenuIconsExample,
1214
MenuOverviewExample,
1315
MenuPositionExample,
1416
MenuNestedExample,
1517
};
1618

1719
const EXAMPLES = [
20+
MenuHarnessExample,
1821
MenuIconsExample,
1922
MenuOverviewExample,
2023
MenuPositionExample,
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<button type="button" [matMenuTriggerFor]="settingsMenu">Settings</button>
2+
<button type="button" disabled [matMenuTriggerFor]="settingsMenu">Disabled menu</button>
3+
4+
<mat-menu #settingsMenu>
5+
<menu mat-menu-item>Profile</menu>
6+
<menu mat-menu-item>Account</menu>
7+
</mat-menu>
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import {TestBed, ComponentFixture, waitForAsync, inject} from '@angular/core/testing';
2+
import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed';
3+
import {MatMenuHarness} from '@angular/material/menu/testing';
4+
import {HarnessLoader} from '@angular/cdk/testing';
5+
import {BrowserDynamicTestingModule, platformBrowserDynamicTesting}
6+
from '@angular/platform-browser-dynamic/testing';
7+
import {MatMenuModule} from '@angular/material/menu';
8+
import {MenuHarnessExample} from './menu-harness-example';
9+
import {OverlayContainer} from '@angular/cdk/overlay';
10+
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
11+
12+
describe('MenuHarnessExample', () => {
13+
let fixture: ComponentFixture<MenuHarnessExample>;
14+
let loader: HarnessLoader;
15+
16+
beforeAll(() => {
17+
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
18+
});
19+
20+
beforeEach(
21+
waitForAsync(() => {
22+
TestBed.configureTestingModule({
23+
imports: [MatMenuModule, NoopAnimationsModule],
24+
declarations: [MenuHarnessExample]
25+
}).compileComponents();
26+
}));
27+
28+
beforeEach(() => {
29+
fixture = TestBed.createComponent(MenuHarnessExample);
30+
fixture.detectChanges();
31+
loader = TestbedHarnessEnvironment.loader(fixture);
32+
inject([OverlayContainer], () => {})();
33+
});
34+
35+
it('should load all menu harnesses', async () => {
36+
const menues = await loader.getAllHarnesses(MatMenuHarness);
37+
expect(menues.length).toBe(2);
38+
});
39+
40+
it('should get disabled state', async () => {
41+
const [enabledMenu, disabledMenu] = await loader.getAllHarnesses(MatMenuHarness);
42+
expect(await enabledMenu.isDisabled()).toBe(false);
43+
expect(await disabledMenu.isDisabled()).toBe(true);
44+
});
45+
46+
it('should get menu text', async () => {
47+
const [firstMenu, secondMenu] = await loader.getAllHarnesses(MatMenuHarness);
48+
expect(await firstMenu.getTriggerText()).toBe('Settings');
49+
expect(await secondMenu.getTriggerText()).toBe('Disabled menu');
50+
});
51+
52+
it('should open and close', async () => {
53+
const menu = await loader.getHarness(MatMenuHarness.with({triggerText: 'Settings'}));
54+
expect(await menu.isOpen()).toBe(false);
55+
await menu.open();
56+
expect(await menu.isOpen()).toBe(true);
57+
await menu.close();
58+
expect(await menu.isOpen()).toBe(false);
59+
});
60+
61+
it('should get all items', async () => {
62+
const menu = await loader.getHarness(MatMenuHarness.with({triggerText: 'Settings'}));
63+
await menu.open();
64+
expect((await menu.getItems()).length).toBe(2);
65+
});
66+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import {Component} from '@angular/core';
2+
3+
/**
4+
* @title Testing with MatMenuHarness
5+
*/
6+
@Component({
7+
selector: 'menu-harness-example',
8+
templateUrl: 'menu-harness-example.html',
9+
})
10+
export class MenuHarnessExample {}

0 commit comments

Comments
 (0)