Skip to content

Commit 2b860a5

Browse files
committed
docs(material/menu): add harness example for menu
1 parent 71b7b15 commit 2b860a5

File tree

5 files changed

+102
-0
lines changed

5 files changed

+102
-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" id="settings" [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: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
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+
let overlayContainer: OverlayContainer;
16+
17+
beforeAll(() => {
18+
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
19+
});
20+
21+
beforeEach(
22+
waitForAsync(() => {
23+
TestBed.configureTestingModule({
24+
imports: [MatMenuModule, NoopAnimationsModule],
25+
declarations: [MenuHarnessExample]
26+
}).compileComponents();
27+
}));
28+
29+
beforeEach(() => {
30+
fixture = TestBed.createComponent(MenuHarnessExample);
31+
fixture.detectChanges();
32+
loader = TestbedHarnessEnvironment.loader(fixture);
33+
inject([OverlayContainer], (oc: OverlayContainer) => {
34+
overlayContainer = oc;
35+
})();
36+
});
37+
38+
afterEach(() => {
39+
// Angular won't call this for us so we need to do it ourselves to avoid leaks.
40+
overlayContainer.ngOnDestroy();
41+
overlayContainer = null!;
42+
});
43+
44+
it('should load all menu harnesses', async () => {
45+
const menues = await loader.getAllHarnesses(MatMenuHarness);
46+
expect(menues.length).toBe(2);
47+
});
48+
49+
it('should get disabled state', async () => {
50+
const [enabledMenu, disabledMenu] = await loader.getAllHarnesses(MatMenuHarness);
51+
expect(await enabledMenu.isDisabled()).toBe(false);
52+
expect(await disabledMenu.isDisabled()).toBe(true);
53+
});
54+
55+
it('should get menu text', async () => {
56+
const [firstMenu, secondMenu] = await loader.getAllHarnesses(MatMenuHarness);
57+
expect(await firstMenu.getTriggerText()).toBe('Settings');
58+
expect(await secondMenu.getTriggerText()).toBe('Disabled menu');
59+
});
60+
61+
it('should open and close', async () => {
62+
const menu = await loader.getHarness(MatMenuHarness.with({triggerText: 'Settings'}));
63+
expect(await menu.isOpen()).toBe(false);
64+
await menu.open();
65+
expect(await menu.isOpen()).toBe(true);
66+
await menu.close();
67+
expect(await menu.isOpen()).toBe(false);
68+
});
69+
70+
it('should get all items', async () => {
71+
const menu = await loader.getHarness(MatMenuHarness.with({triggerText: 'Settings'}));
72+
await menu.open();
73+
expect((await menu.getItems()).length).toBe(2);
74+
});
75+
});
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)