Skip to content

Commit 1a9917d

Browse files
crisbetotinayuangao
authored andcommitted
refactor(slider): improve unit test speed (#10793)
Reduces the slider test time to about half the initial time by not recompiling all the test cases for each test. Also removes the `async` usages and combines the two top-level `describe` blocks into one.
1 parent 5b5f2ee commit 1a9917d

File tree

1 file changed

+30
-71
lines changed

1 file changed

+30
-71
lines changed

src/lib/slider/slider.spec.ts

Lines changed: 30 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -11,49 +11,30 @@ import {
1111
UP_ARROW,
1212
} from '@angular/cdk/keycodes';
1313
import {dispatchFakeEvent, dispatchKeyboardEvent, dispatchMouseEvent} from '@angular/cdk/testing';
14-
import {Component, DebugElement, ViewChild} from '@angular/core';
15-
import {async, ComponentFixture, TestBed, fakeAsync, flush} from '@angular/core/testing';
14+
import {Component, DebugElement, ViewChild, Type} from '@angular/core';
15+
import {ComponentFixture, TestBed, fakeAsync, flush} from '@angular/core/testing';
1616
import {FormControl, FormsModule, ReactiveFormsModule} from '@angular/forms';
1717
import {By, HAMMER_GESTURE_CONFIG} from '@angular/platform-browser';
1818
import {MatSlider, MatSliderModule} from './index';
1919
import {TestGestureConfig} from './test-gesture-config';
2020

21-
22-
describe('MatSlider without forms', () => {
21+
describe('MatSlider', () => {
2322
let gestureConfig: TestGestureConfig;
2423

25-
beforeEach(async(() => {
24+
function createComponent<T>(component: Type<T>): ComponentFixture<T> {
2625
TestBed.configureTestingModule({
2726
imports: [MatSliderModule, ReactiveFormsModule, FormsModule, BidiModule],
28-
declarations: [
29-
StandardSlider,
30-
DisabledSlider,
31-
SliderWithMinAndMax,
32-
SliderWithValue,
33-
SliderWithStep,
34-
SliderWithAutoTickInterval,
35-
SliderWithSetTickInterval,
36-
SliderWithThumbLabel,
37-
SliderWithOneWayBinding,
38-
SliderWithValueSmallerThanMin,
39-
SliderWithValueGreaterThanMax,
40-
SliderWithChangeHandler,
41-
SliderWithDirAndInvert,
42-
SliderWithTabIndexBinding,
43-
SliderWithNativeTabindexAttr,
44-
VerticalSlider,
45-
SliderWithCustomThumbLabelFormatting,
46-
],
27+
declarations: [component],
4728
providers: [
4829
{provide: HAMMER_GESTURE_CONFIG, useFactory: () => {
4930
gestureConfig = new TestGestureConfig();
5031
return gestureConfig;
5132
}}
52-
],
53-
});
33+
]
34+
}).compileComponents();
5435

55-
TestBed.compileComponents();
56-
}));
36+
return TestBed.createComponent<T>(component);
37+
}
5738

5839
describe('standard slider', () => {
5940
let fixture: ComponentFixture<StandardSlider>;
@@ -63,7 +44,7 @@ describe('MatSlider without forms', () => {
6344
let trackFillElement: HTMLElement;
6445

6546
beforeEach(() => {
66-
fixture = TestBed.createComponent(StandardSlider);
47+
fixture = createComponent(StandardSlider);
6748
fixture.detectChanges();
6849

6950
sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -229,7 +210,7 @@ describe('MatSlider without forms', () => {
229210
let trackFillElement: HTMLElement;
230211

231212
beforeEach(() => {
232-
fixture = TestBed.createComponent(DisabledSlider);
213+
fixture = createComponent(DisabledSlider);
233214
fixture.detectChanges();
234215

235216
sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -305,7 +286,7 @@ describe('MatSlider without forms', () => {
305286
let testComponent: SliderWithMinAndMax;
306287

307288
beforeEach(() => {
308-
fixture = TestBed.createComponent(SliderWithMinAndMax);
289+
fixture = createComponent(SliderWithMinAndMax);
309290
fixture.detectChanges();
310291

311292
sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -399,7 +380,7 @@ describe('MatSlider without forms', () => {
399380
let sliderInstance: MatSlider;
400381

401382
beforeEach(() => {
402-
fixture = TestBed.createComponent(SliderWithValue);
383+
fixture = createComponent(SliderWithValue);
403384
fixture.detectChanges();
404385

405386
sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -436,7 +417,7 @@ describe('MatSlider without forms', () => {
436417
let trackFillElement: HTMLElement;
437418

438419
beforeEach(() => {
439-
fixture = TestBed.createComponent(SliderWithStep);
420+
fixture = createComponent(SliderWithStep);
440421
fixture.detectChanges();
441422

442423
sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -509,7 +490,7 @@ describe('MatSlider without forms', () => {
509490
let ticksElement: HTMLElement;
510491

511492
beforeEach(() => {
512-
fixture = TestBed.createComponent(SliderWithAutoTickInterval);
493+
fixture = createComponent(SliderWithAutoTickInterval);
513494
fixture.detectChanges();
514495

515496
sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -539,7 +520,7 @@ describe('MatSlider without forms', () => {
539520
let ticksElement: HTMLElement;
540521

541522
beforeEach(() => {
542-
fixture = TestBed.createComponent(SliderWithSetTickInterval);
523+
fixture = createComponent(SliderWithSetTickInterval);
543524
fixture.detectChanges();
544525

545526
sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -581,7 +562,7 @@ describe('MatSlider without forms', () => {
581562
let thumbLabelTextElement: Element;
582563

583564
beforeEach(() => {
584-
fixture = TestBed.createComponent(SliderWithThumbLabel);
565+
fixture = createComponent(SliderWithThumbLabel);
585566
fixture.detectChanges();
586567

587568
sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -621,7 +602,7 @@ describe('MatSlider without forms', () => {
621602
let thumbLabelTextElement: Element;
622603

623604
beforeEach(() => {
624-
fixture = TestBed.createComponent(SliderWithCustomThumbLabelFormatting);
605+
fixture = createComponent(SliderWithCustomThumbLabelFormatting);
625606
fixture.detectChanges();
626607

627608
const sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -656,7 +637,7 @@ describe('MatSlider without forms', () => {
656637
let trackFillElement: HTMLElement;
657638

658639
beforeEach(() => {
659-
fixture = TestBed.createComponent(SliderWithOneWayBinding);
640+
fixture = createComponent(SliderWithOneWayBinding);
660641
fixture.detectChanges();
661642

662643
testComponent = fixture.debugElement.componentInstance;
@@ -689,7 +670,7 @@ describe('MatSlider without forms', () => {
689670
let trackFillElement: HTMLElement;
690671

691672
beforeEach(() => {
692-
fixture = TestBed.createComponent(SliderWithValueSmallerThanMin);
673+
fixture = createComponent(SliderWithValueSmallerThanMin);
693674
fixture.detectChanges();
694675

695676
sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -717,7 +698,7 @@ describe('MatSlider without forms', () => {
717698
let trackFillElement: HTMLElement;
718699

719700
beforeEach(() => {
720-
fixture = TestBed.createComponent(SliderWithValueGreaterThanMax);
701+
fixture = createComponent(SliderWithValueGreaterThanMax);
721702
fixture.detectChanges();
722703

723704
sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
@@ -744,7 +725,7 @@ describe('MatSlider without forms', () => {
744725
let testComponent: SliderWithChangeHandler;
745726

746727
beforeEach(() => {
747-
fixture = TestBed.createComponent(SliderWithChangeHandler);
728+
fixture = createComponent(SliderWithChangeHandler);
748729
fixture.detectChanges();
749730

750731
testComponent = fixture.debugElement.componentInstance;
@@ -815,7 +796,7 @@ describe('MatSlider without forms', () => {
815796
let testComponent: SliderWithChangeHandler;
816797

817798
beforeEach(() => {
818-
fixture = TestBed.createComponent(SliderWithChangeHandler);
799+
fixture = createComponent(SliderWithChangeHandler);
819800
fixture.detectChanges();
820801

821802
testComponent = fixture.debugElement.componentInstance;
@@ -863,7 +844,7 @@ describe('MatSlider without forms', () => {
863844
let sliderInstance: MatSlider;
864845

865846
beforeEach(() => {
866-
fixture = TestBed.createComponent(SliderWithChangeHandler);
847+
fixture = createComponent(SliderWithChangeHandler);
867848
fixture.detectChanges();
868849

869850
testComponent = fixture.debugElement.componentInstance;
@@ -1002,7 +983,7 @@ describe('MatSlider without forms', () => {
1002983
let testComponent: SliderWithDirAndInvert;
1003984

1004985
beforeEach(() => {
1005-
fixture = TestBed.createComponent(SliderWithDirAndInvert);
986+
fixture = createComponent(SliderWithDirAndInvert);
1006987
fixture.detectChanges();
1007988

1008989
testComponent = fixture.debugElement.componentInstance;
@@ -1143,7 +1124,7 @@ describe('MatSlider without forms', () => {
11431124
let testComponent: VerticalSlider;
11441125

11451126
beforeEach(() => {
1146-
fixture = TestBed.createComponent(VerticalSlider);
1127+
fixture = createComponent(VerticalSlider);
11471128
fixture.detectChanges();
11481129

11491130
testComponent = fixture.debugElement.componentInstance;
@@ -1199,7 +1180,7 @@ describe('MatSlider without forms', () => {
11991180
describe('tabindex', () => {
12001181

12011182
it('should allow setting the tabIndex through binding', () => {
1202-
const fixture = TestBed.createComponent(SliderWithTabIndexBinding);
1183+
const fixture = createComponent(SliderWithTabIndexBinding);
12031184
fixture.detectChanges();
12041185

12051186
const slider = fixture.debugElement.query(By.directive(MatSlider)).componentInstance;
@@ -1213,7 +1194,7 @@ describe('MatSlider without forms', () => {
12131194
});
12141195

12151196
it('should detect the native tabindex attribute', () => {
1216-
const fixture = TestBed.createComponent(SliderWithNativeTabindexAttr);
1197+
const fixture = createComponent(SliderWithNativeTabindexAttr);
12171198
fixture.detectChanges();
12181199

12191200
const slider = fixture.debugElement.query(By.directive(MatSlider)).componentInstance;
@@ -1222,28 +1203,6 @@ describe('MatSlider without forms', () => {
12221203
.toBe(5, 'Expected the tabIndex to be set to the value of the native attribute.');
12231204
});
12241205
});
1225-
});
1226-
1227-
describe('MatSlider with forms module', () => {
1228-
let gestureConfig: TestGestureConfig;
1229-
1230-
beforeEach(async(() => {
1231-
TestBed.configureTestingModule({
1232-
imports: [MatSliderModule, ReactiveFormsModule, FormsModule, BidiModule],
1233-
declarations: [
1234-
SliderWithFormControl,
1235-
SliderWithNgModel,
1236-
],
1237-
providers: [
1238-
{provide: HAMMER_GESTURE_CONFIG, useFactory: () => {
1239-
gestureConfig = new TestGestureConfig();
1240-
return gestureConfig;
1241-
}}
1242-
],
1243-
});
1244-
1245-
TestBed.compileComponents();
1246-
}));
12471206

12481207
describe('slider with ngModel', () => {
12491208
let fixture: ComponentFixture<SliderWithNgModel>;
@@ -1252,7 +1211,7 @@ describe('MatSlider with forms module', () => {
12521211
let testComponent: SliderWithNgModel;
12531212

12541213
beforeEach(() => {
1255-
fixture = TestBed.createComponent(SliderWithNgModel);
1214+
fixture = createComponent(SliderWithNgModel);
12561215
fixture.detectChanges();
12571216

12581217
testComponent = fixture.debugElement.componentInstance;
@@ -1314,7 +1273,7 @@ describe('MatSlider with forms module', () => {
13141273
let testComponent: SliderWithFormControl;
13151274

13161275
beforeEach(() => {
1317-
fixture = TestBed.createComponent(SliderWithFormControl);
1276+
fixture = createComponent(SliderWithFormControl);
13181277
fixture.detectChanges();
13191278

13201279
testComponent = fixture.debugElement.componentInstance;

0 commit comments

Comments
 (0)