Skip to content

Commit 90fbd14

Browse files
committed
docs(material/sidenav): add sidenav harness example (#21788)
(cherry picked from commit 47ea05d)
1 parent 8e215af commit 90fbd14

File tree

5 files changed

+110
-2
lines changed

5 files changed

+110
-2
lines changed

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

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
1-
load("//tools:defaults.bzl", "ng_module")
1+
load("//tools:defaults.bzl", "ng_module", "ng_test_library", "ng_web_test_suite")
22

33
package(default_visibility = ["//visibility:public"])
44

55
ng_module(
66
name = "sidenav",
7-
srcs = glob(["**/*.ts"]),
7+
srcs = glob(
8+
["**/*.ts"],
9+
exclude = ["**/*.spec.ts"],
10+
),
811
assets = glob([
912
"**/*.html",
1013
"**/*.css",
1114
]),
1215
module_name = "@angular/components-examples/material/sidenav",
1316
deps = [
1417
"//src/cdk/layout",
18+
"//src/cdk/testing",
19+
"//src/cdk/testing/testbed",
1520
"//src/material/button",
1621
"//src/material/checkbox",
1722
"//src/material/icon",
@@ -21,6 +26,9 @@ ng_module(
2126
"//src/material/sidenav",
2227
"//src/material/toolbar",
2328
"@npm//@angular/forms",
29+
"@npm//@angular/platform-browser",
30+
"@npm//@angular/platform-browser-dynamic",
31+
"@npm//@types/jasmine",
2432
],
2533
)
2634

@@ -32,3 +40,23 @@ filegroup(
3240
"**/*.ts",
3341
]),
3442
)
43+
44+
ng_test_library(
45+
name = "unit_tests_lib",
46+
srcs = glob(["**/*.spec.ts"]),
47+
deps = [
48+
":sidenav",
49+
"//src/cdk/testing",
50+
"//src/cdk/testing/testbed",
51+
"//src/material/sidenav",
52+
"//src/material/sidenav/testing",
53+
"@npm//@angular/platform-browser",
54+
"@npm//@angular/platform-browser-dynamic",
55+
],
56+
)
57+
58+
ng_web_test_suite(
59+
name = "unit_tests",
60+
exclude_init_script = True,
61+
deps = [":unit_tests_lib"],
62+
)

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@ import {SidenavOpenCloseExample} from './sidenav-open-close/sidenav-open-close-e
2121
import {SidenavOverviewExample} from './sidenav-overview/sidenav-overview-example';
2222
import {SidenavPositionExample} from './sidenav-position/sidenav-position-example';
2323
import {SidenavResponsiveExample} from './sidenav-responsive/sidenav-responsive-example';
24+
import {SidenavHarnessExample} from './sidenav-harness/sidenav-harness-example';
2425

2526
export {
2627
SidenavAutosizeExample,
2728
SidenavBackdropExample,
2829
SidenavDisableCloseExample,
2930
SidenavDrawerOverviewExample,
31+
SidenavHarnessExample,
3032
SidenavFixedExample,
3133
SidenavModeExample,
3234
SidenavOpenCloseExample,
@@ -40,6 +42,7 @@ const EXAMPLES = [
4042
SidenavBackdropExample,
4143
SidenavDisableCloseExample,
4244
SidenavDrawerOverviewExample,
45+
SidenavHarnessExample,
4346
SidenavFixedExample,
4447
SidenavModeExample,
4548
SidenavOpenCloseExample,
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<mat-drawer-container>
2+
<mat-drawer mode="side">Hello from the drawer</mat-drawer>
3+
<mat-drawer-content>Hello from the content</mat-drawer-content>
4+
</mat-drawer-container>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import {TestBed, ComponentFixture} from '@angular/core/testing';
2+
import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed';
3+
import {
4+
MatDrawerHarness,
5+
MatDrawerContainerHarness,
6+
MatDrawerContentHarness} from '@angular/material/sidenav/testing';
7+
import {HarnessLoader} from '@angular/cdk/testing';
8+
import {
9+
BrowserDynamicTestingModule,
10+
platformBrowserDynamicTesting,
11+
} from '@angular/platform-browser-dynamic/testing';
12+
import {MatSidenavModule} from '@angular/material/sidenav';
13+
import {SidenavHarnessExample} from './sidenav-harness-example';
14+
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
15+
16+
describe('SidenavHarnessExample', () => {
17+
let fixture: ComponentFixture<SidenavHarnessExample>;
18+
let loader: HarnessLoader;
19+
20+
beforeAll(() => {
21+
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
22+
});
23+
24+
beforeEach(async () => {
25+
await TestBed.configureTestingModule({
26+
imports: [MatSidenavModule, NoopAnimationsModule],
27+
declarations: [SidenavHarnessExample]
28+
}).compileComponents();
29+
30+
fixture = TestBed.createComponent(SidenavHarnessExample);
31+
fixture.detectChanges();
32+
loader = TestbedHarnessEnvironment.loader(fixture);
33+
});
34+
35+
it('should load all drawer harnesses', async () => {
36+
const drawers = await loader.getAllHarnesses(MatDrawerHarness);
37+
expect(drawers.length).toBe(1);
38+
});
39+
40+
it('should be able to get the mode of a drawer', async () => {
41+
const drawer = await loader.getHarness(MatDrawerHarness);
42+
43+
expect(await drawer.getMode()).toBe('side');
44+
});
45+
46+
it('should get the drawers within a container', async () => {
47+
const container = await loader.getHarness(MatDrawerContainerHarness);
48+
const drawer = await container.getDrawers();
49+
50+
expect(await (await drawer[0].host()).text()).toBe('Hello from the drawer');
51+
});
52+
53+
it('should get the content of a container', async () => {
54+
const container = await loader.getHarness(MatDrawerContainerHarness);
55+
const content = await container.getContent();
56+
expect(await (await content.host()).text()).toBe('Hello from the content');
57+
});
58+
59+
it('should load all drawer content harnesses', async () => {
60+
const contentElements = await loader.getAllHarnesses(MatDrawerContentHarness);
61+
expect(contentElements.length).toBe(1);
62+
});
63+
});
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 MatSidenavHarness
5+
*/
6+
@Component({
7+
selector: 'sidenav-harness-example',
8+
templateUrl: 'sidenav-harness-example.html',
9+
})
10+
export class SidenavHarnessExample {}

0 commit comments

Comments
 (0)