Skip to content

Commit 764c9d3

Browse files
committed
feat(Answer:23): solution
1 parent e955435 commit 764c9d3

2 files changed

Lines changed: 87 additions & 12 deletions

File tree

Lines changed: 74 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,104 @@
1-
import { render } from '@testing-library/angular';
1+
import { HarnessLoader } from '@angular/cdk/testing';
2+
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
3+
import { MatButtonHarness } from '@angular/material/button/testing';
4+
import { MatCheckboxHarness } from '@angular/material/checkbox/testing';
5+
import { MatInputHarness } from '@angular/material/input/testing';
6+
import {
7+
MatSliderHarness,
8+
MatSliderThumbHarness,
9+
} from '@angular/material/slider/testing';
10+
import { render, RenderResult, screen } from '@testing-library/angular';
211
import { ChildComponent } from './child.component';
312

4-
describe('ChildComponent', () => {
13+
describe.only('ChildComponent', () => {
14+
let view: RenderResult<ChildComponent, ChildComponent>;
15+
let loader: HarnessLoader;
16+
17+
beforeEach(async () => {
18+
view = await render(ChildComponent);
19+
loader = TestbedHarnessEnvironment.documentRootLoader(view.fixture);
20+
});
21+
522
describe('When init', () => {
623
test('Then show 1 slider, 3 checkboxes, 4 inputs, 2 buttons', async () => {
7-
await render(ChildComponent);
24+
expect(screen.getByTestId('mat-slider')).toBeInTheDocument();
25+
expect(screen.getAllByRole('checkbox').length).toBe(3);
26+
expect(screen.getAllByRole('button').length).toBe(2);
827
});
928

1029
test('Then initial value of slider thumb is 0', async () => {
11-
await render(ChildComponent);
30+
const sliderThumbHarness = await loader.getHarness(MatSliderThumbHarness);
31+
32+
expect(await sliderThumbHarness.getValue()).toBe(0);
33+
expect(await sliderThumbHarness.getDisplayValue()).toBe('0');
1234
});
1335
});
1436

1537
describe('Given maxValue set to 109', () => {
1638
test('Then slider max value is 109', async () => {
17-
await render(ChildComponent);
39+
const sliderHarness = await loader.getHarness(MatSliderHarness);
40+
const maxValueInput = loader.getHarness(
41+
MatInputHarness.with({ selector: '#input-max' }),
42+
);
43+
44+
(await maxValueInput).setValue('109');
45+
46+
expect(await sliderHarness.getMaxValue()).toBe(109);
1847
});
1948
});
2049

2150
describe('When disabled checkbox is toggled', () => {
2251
test('Then slider is disabled', async () => {
23-
await render(ChildComponent);
52+
const sliderHarness = await loader.getHarness(MatSliderHarness);
53+
const disabledCheckbox = await loader.getHarness(
54+
MatCheckboxHarness.with({
55+
selector: '[data-testid="disable-checkbox"]',
56+
}),
57+
);
58+
59+
await disabledCheckbox.check();
60+
61+
expect(await sliderHarness.isDisabled()).toBe(true);
2462
});
2563
});
2664

2765
describe('Given step value set to 5, and When clicking on forward button two times', () => {
2866
test('Then thumb value is 10', async () => {
29-
await render(ChildComponent);
67+
const sliderThumbHarness = await loader.getHarness(MatSliderThumbHarness);
68+
const stepInput = await loader.getHarness(
69+
MatInputHarness.with({ selector: '#input-step' }),
70+
);
71+
const forwardButton = await loader.getHarness(
72+
MatButtonHarness.with({
73+
selector: 'button[data-testid="arrow-forward-btn"]',
74+
}),
75+
);
76+
77+
await stepInput.setValue('5');
78+
await forwardButton.click();
79+
await forwardButton.click();
80+
81+
expect(await sliderThumbHarness.getValue()).toBe(10);
3082
});
3183
});
3284

3385
describe('Given slider value set to 5, and step value to 6 and When clicking on back button', () => {
3486
test('Then slider value is still 5', async () => {
35-
await render(ChildComponent);
87+
const sliderThumbHarness = await loader.getHarness(MatSliderThumbHarness);
88+
const stepInput = await loader.getHarness(
89+
MatInputHarness.with({ selector: '#input-step' }),
90+
);
91+
const backButton = await loader.getHarness(
92+
MatButtonHarness.with({
93+
selector: 'button[data-testid="arrow-back-btn"]',
94+
}),
95+
);
96+
97+
await sliderThumbHarness.setValue(5);
98+
await stepInput.setValue('6');
99+
await backButton.click();
100+
101+
expect(await sliderThumbHarness.getValue()).toBe(5);
36102
});
37103
});
38104
});

apps/testing/23-harness/src/app/child.component.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,28 +46,37 @@ import { MatSliderModule } from '@angular/material/slider';
4646
</section>
4747
4848
<section class="flex items-center">
49-
<mat-checkbox [(ngModel)]="disabled">Disabled</mat-checkbox>
49+
<mat-checkbox [(ngModel)]="disabled" data-testid="disable-checkbox">
50+
Disabled
51+
</mat-checkbox>
5052
</section>
5153
</mat-card-content>
5254
</mat-card>
5355
5456
<mat-card class="flex">
5557
<mat-card-content>
5658
<div class="flex gap-10">
57-
<button mat-mini-fab (click)="back()">
59+
<button mat-mini-fab (click)="back()" data-testid="arrow-back-btn">
5860
<mat-icon>arrow_back_ios</mat-icon>
5961
</button>
6062
<mat-slider
63+
data-testid="mat-slider"
6164
class="m-4"
6265
[disabled]="disabled"
6366
[max]="max"
6467
[min]="min"
6568
[step]="step"
6669
[discrete]="thumbLabel"
6770
[showTickMarks]="showTicks">
68-
<input matSliderThumb [(ngModel)]="value" />
71+
<input
72+
matSliderThumb
73+
[(ngModel)]="value"
74+
data-testid="mat-slider-input" />
6975
</mat-slider>
70-
<button mat-mini-fab (click)="forward()">
76+
<button
77+
mat-mini-fab
78+
(click)="forward()"
79+
data-testid="arrow-forward-btn">
7180
<mat-icon>arrow_forward_ios</mat-icon>
7281
</button>
7382
</div>

0 commit comments

Comments
 (0)