Skip to content

Commit f2e8359

Browse files
annieywmmalerba
authored andcommitted
docs(material/stepper): add harness example for stepper (#21409)
(cherry picked from commit e93edbc)
1 parent dc2840b commit f2e8359

File tree

5 files changed

+107
-0
lines changed

5 files changed

+107
-0
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,17 @@ ng_module(
1212
module_name = "@angular/components-examples/material/stepper",
1313
deps = [
1414
"//src/cdk/stepper",
15+
"//src/cdk/testing",
16+
"//src/cdk/testing/testbed",
1517
"//src/material/button",
1618
"//src/material/icon",
1719
"//src/material/input",
1820
"//src/material/stepper",
21+
"//src/material/stepper/testing",
1922
"@npm//@angular/forms",
23+
"@npm//@angular/platform-browser",
24+
"@npm//@angular/platform-browser-dynamic",
25+
"@npm//@types/jasmine",
2026
],
2127
)
2228

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ import {StepperOptionalExample} from './stepper-optional/stepper-optional-exampl
1313
import {StepperOverviewExample} from './stepper-overview/stepper-overview-example';
1414
import {StepperStatesExample} from './stepper-states/stepper-states-example';
1515
import {StepperVerticalExample} from './stepper-vertical/stepper-vertical-example';
16+
import {StepperHarnessExample} from './stepper-harness/stepper-harness-example';
1617

1718
export {
1819
StepperEditableExample,
1920
StepperErrorsExample,
21+
StepperHarnessExample,
2022
StepperLabelPositionBottomExample,
2123
StepperOptionalExample,
2224
StepperOverviewExample,
@@ -27,6 +29,7 @@ export {
2729
const EXAMPLES = [
2830
StepperEditableExample,
2931
StepperErrorsExample,
32+
StepperHarnessExample,
3033
StepperLabelPositionBottomExample,
3134
StepperOptionalExample,
3235
StepperOverviewExample,
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<mat-horizontal-stepper>
2+
<mat-step>
3+
<ng-template matStepLabel>One</ng-template>
4+
<button matStepperNext>Next</button>
5+
</mat-step>
6+
<mat-step optional>
7+
<ng-template matStepLabel>Two</ng-template>
8+
<button matStepperPrevious>Previous</button>
9+
<button matStepperNext>Next</button>
10+
</mat-step>
11+
<mat-step optional>
12+
<ng-template matStepLabel>Three</ng-template>
13+
<button matStepperPrevious>Previous</button>
14+
</mat-step>
15+
</mat-horizontal-stepper>
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import {TestBed, ComponentFixture, waitForAsync} from '@angular/core/testing';
2+
import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed';
3+
import {MatStepperHarness, MatStepperNextHarness} from '@angular/material/stepper/testing';
4+
import {HarnessLoader, parallel} from '@angular/cdk/testing';
5+
import {BrowserDynamicTestingModule, platformBrowserDynamicTesting}
6+
from '@angular/platform-browser-dynamic/testing';
7+
import {MatStepperModule} from '@angular/material/stepper';
8+
import {StepperHarnessExample} from './stepper-harness-example';
9+
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
10+
import {ReactiveFormsModule} from '@angular/forms';
11+
12+
describe('StepperHarnessExample', () => {
13+
let fixture: ComponentFixture<StepperHarnessExample>;
14+
let loader: HarnessLoader;
15+
16+
beforeAll(() => {
17+
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
18+
});
19+
20+
beforeEach(
21+
waitForAsync(() => {
22+
TestBed.configureTestingModule({
23+
imports: [MatStepperModule, NoopAnimationsModule, ReactiveFormsModule],
24+
declarations: [StepperHarnessExample],
25+
}).compileComponents();
26+
fixture = TestBed.createComponent(StepperHarnessExample);
27+
fixture.detectChanges();
28+
loader = TestbedHarnessEnvironment.loader(fixture);
29+
})
30+
);
31+
32+
it('should load all stepper harnesses', async () => {
33+
const steppers = await loader.getAllHarnesses(MatStepperHarness);
34+
expect(steppers.length).toBe(1);
35+
});
36+
37+
it('should get the steps of a stepper', async () => {
38+
const stepper = await loader.getHarness(MatStepperHarness);
39+
const steps = await stepper.getSteps();
40+
expect(steps.length).toEqual(3);
41+
});
42+
43+
it('should be able to get the template-based label of a step', async () => {
44+
const stepper = await loader.getHarness(MatStepperHarness);
45+
const steps = await stepper.getSteps();
46+
expect(await parallel(() => {
47+
return steps.map(step => step.getLabel());
48+
})).toEqual(['One', 'Two', 'Three']);
49+
});
50+
51+
it('should go forward when pressing the next button', async () => {
52+
const stepper = await loader.getHarness(MatStepperHarness);
53+
const steps = await stepper.getSteps();
54+
const secondStep = steps[1];
55+
const nextButton = await secondStep.getHarness(MatStepperNextHarness);
56+
57+
await secondStep.select();
58+
59+
expect(await parallel(() => steps.map(step => step.isSelected()))).toEqual([
60+
false,
61+
true,
62+
false
63+
]);
64+
65+
await nextButton.click();
66+
67+
expect(await parallel(() => steps.map(step => step.isSelected()))).toEqual([
68+
false,
69+
false,
70+
true
71+
]);
72+
});
73+
});
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 MatStepperHarness
5+
*/
6+
@Component({
7+
selector: 'stepper-harness-example',
8+
templateUrl: 'stepper-harness-example.html',
9+
})
10+
export class StepperHarnessExample {}

0 commit comments

Comments
 (0)