Skip to content

Commit 839dfba

Browse files
authored
test(multiple): Update tests to use exhaustive checkNoChanges by default (#31069)
When components use `OnPush`, they prevent `ExpressionHasChanged...` from being thrown when it should (angular/angular#45612). The exhaustive option ignores dirty flags and traverses the entire view tree checking for changes. This commit configures component tests to do this by default and opts out any tests with existing issues.
1 parent 936d179 commit 839dfba

File tree

17 files changed

+86
-25
lines changed

17 files changed

+86
-25
lines changed

src/cdk-experimental/scrolling/virtual-scroll-viewport.spec.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import {CdkVirtualScrollViewport, ScrollingModule} from '@angular/cdk/scrolling';
2-
import {Component, Input, ViewChild, ViewEncapsulation} from '@angular/core';
2+
import {
3+
Component,
4+
Input,
5+
provideCheckNoChangesConfig,
6+
ViewChild,
7+
ViewEncapsulation,
8+
} from '@angular/core';
39
import {ComponentFixture, TestBed, fakeAsync, flush, waitForAsync} from '@angular/core/testing';
410
import {ScrollingModule as ExperimentalScrollingModule} from './scrolling-module';
511

@@ -11,6 +17,7 @@ describe('CdkVirtualScrollViewport', () => {
1117

1218
beforeEach(waitForAsync(() => {
1319
TestBed.configureTestingModule({
20+
providers: [provideCheckNoChangesConfig({exhaustive: false})],
1421
imports: [ScrollingModule, ExperimentalScrollingModule, AutoSizeVirtualScroll],
1522
});
1623
}));

src/components-examples/material/checkbox/checkbox-harness/checkbox-harness-example.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed';
33
import {ComponentFixture, TestBed} from '@angular/core/testing';
44
import {MatCheckboxHarness} from '@angular/material/checkbox/testing';
55
import {CheckboxHarnessExample} from './checkbox-harness-example';
6+
import {provideCheckNoChangesConfig} from '@angular/core';
67

78
describe('CheckboxHarnessExample', () => {
89
let fixture: ComponentFixture<CheckboxHarnessExample>;
910
let loader: HarnessLoader;
1011

1112
beforeEach(() => {
13+
TestBed.configureTestingModule({providers: [provideCheckNoChangesConfig({exhaustive: false})]});
1214
fixture = TestBed.createComponent(CheckboxHarnessExample);
1315
fixture.detectChanges();
1416
loader = TestbedHarnessEnvironment.loader(fixture);

src/material/button-toggle/button-toggle.spec.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
import {dispatchMouseEvent} from '@angular/cdk/testing/private';
2-
import {Component, DebugElement, QueryList, ViewChild, ViewChildren} from '@angular/core';
2+
import {
3+
Component,
4+
DebugElement,
5+
provideCheckNoChangesConfig,
6+
QueryList,
7+
ViewChild,
8+
ViewChildren,
9+
} from '@angular/core';
310
import {ComponentFixture, TestBed, fakeAsync, flush, tick} from '@angular/core/testing';
411
import {FormControl, FormsModule, NgModel, ReactiveFormsModule} from '@angular/forms';
512
import {By} from '@angular/platform-browser';
@@ -14,6 +21,7 @@ import {
1421
describe('MatButtonToggle with forms', () => {
1522
beforeEach(fakeAsync(() => {
1623
TestBed.configureTestingModule({
24+
providers: [provideCheckNoChangesConfig({exhaustive: false})],
1725
imports: [
1826
MatButtonToggleModule,
1927
FormsModule,
@@ -327,6 +335,7 @@ describe('MatButtonToggle with forms', () => {
327335
describe('MatButtonToggle without forms', () => {
328336
beforeEach(fakeAsync(() => {
329337
TestBed.configureTestingModule({
338+
providers: [provideCheckNoChangesConfig({exhaustive: false})],
330339
imports: [
331340
MatButtonToggleModule,
332341
ButtonTogglesInsideButtonToggleGroup,

src/material/checkbox/testing/checkbox-harness.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component, signal} from '@angular/core';
1+
import {Component, provideCheckNoChangesConfig, signal} from '@angular/core';
22
import {ComponentFixture, TestBed} from '@angular/core/testing';
33
import {HarnessLoader} from '@angular/cdk/testing';
44
import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed';
@@ -12,6 +12,7 @@ describe('MatCheckboxHarness', () => {
1212

1313
beforeEach(() => {
1414
TestBed.configureTestingModule({
15+
providers: [provideCheckNoChangesConfig({exhaustive: false})],
1516
imports: [MatCheckboxModule, ReactiveFormsModule, CheckboxHarnessTest],
1617
});
1718

src/material/datepicker/calendar.spec.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
dispatchKeyboardEvent,
66
dispatchMouseEvent,
77
} from '@angular/cdk/testing/private';
8-
import {Component} from '@angular/core';
8+
import {Component, provideCheckNoChangesConfig} from '@angular/core';
99
import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing';
1010
import {DateAdapter, MatNativeDateModule} from '../core';
1111
import {By} from '@angular/platform-browser';
@@ -21,7 +21,11 @@ describe('MatCalendar', () => {
2121
beforeEach(waitForAsync(() => {
2222
TestBed.configureTestingModule({
2323
imports: [MatNativeDateModule, MatDatepickerModule],
24-
providers: [MatDatepickerIntl, {provide: Directionality, useFactory: () => ({value: 'ltr'})}],
24+
providers: [
25+
MatDatepickerIntl,
26+
{provide: Directionality, useFactory: () => ({value: 'ltr'})},
27+
provideCheckNoChangesConfig({exhaustive: false}),
28+
],
2529
declarations: [
2630
// Test components.
2731
StandardCalendar,

src/material/datepicker/date-range-input.spec.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,16 @@ import {Direction, Directionality} from '@angular/cdk/bidi';
33
import {BACKSPACE, LEFT_ARROW, RIGHT_ARROW} from '@angular/cdk/keycodes';
44
import {OverlayContainer} from '@angular/cdk/overlay';
55
import {dispatchFakeEvent, dispatchKeyboardEvent} from '@angular/cdk/testing/private';
6-
import {Component, Directive, ElementRef, Provider, signal, Type, ViewChild} from '@angular/core';
6+
import {
7+
Component,
8+
Directive,
9+
ElementRef,
10+
provideCheckNoChangesConfig,
11+
Provider,
12+
signal,
13+
Type,
14+
ViewChild,
15+
} from '@angular/core';
716
import {ComponentFixture, fakeAsync, flush, TestBed, tick} from '@angular/core/testing';
817
import {
918
FormControl,
@@ -37,6 +46,7 @@ describe('MatDateRangeInput', () => {
3746
component,
3847
],
3948
providers: [
49+
provideCheckNoChangesConfig({exhaustive: false}),
4050
...providers,
4151
{provide: MATERIAL_ANIMATIONS, useValue: {animationsDisabled: true}},
4252
],

src/material/expansion/accordion.spec.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,13 @@ import {
55
dispatchEvent,
66
dispatchKeyboardEvent,
77
} from '@angular/cdk/testing/private';
8-
import {Component, QueryList, ViewChild, ViewChildren} from '@angular/core';
8+
import {
9+
Component,
10+
provideCheckNoChangesConfig,
11+
QueryList,
12+
ViewChild,
13+
ViewChildren,
14+
} from '@angular/core';
915
import {TestBed, waitForAsync} from '@angular/core/testing';
1016
import {By} from '@angular/platform-browser';
1117
import {
@@ -20,6 +26,7 @@ describe('MatAccordion', () => {
2026

2127
beforeEach(waitForAsync(() => {
2228
TestBed.configureTestingModule({
29+
providers: [provideCheckNoChangesConfig({exhaustive: false})],
2330
imports: [
2431
MatExpansionModule,
2532
AccordionWithHideToggle,

src/material/list/selection-list.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
ChangeDetectionStrategy,
1111
Component,
1212
DebugElement,
13+
provideCheckNoChangesConfig,
1314
QueryList,
1415
ViewChildren,
1516
} from '@angular/core';
@@ -44,6 +45,7 @@ describe('MatSelectionList without forms', () => {
4445

4546
beforeEach(waitForAsync(() => {
4647
TestBed.configureTestingModule({
48+
providers: [provideCheckNoChangesConfig({exhaustive: false})],
4749
imports: [
4850
MatListModule,
4951
SelectionListWithListOptions,
@@ -1277,6 +1279,7 @@ describe('MatSelectionList without forms', () => {
12771279
describe('MatSelectionList with forms', () => {
12781280
beforeEach(waitForAsync(() => {
12791281
TestBed.configureTestingModule({
1282+
providers: [provideCheckNoChangesConfig({exhaustive: false})],
12801283
imports: [
12811284
MatListModule,
12821285
FormsModule,

src/material/menu/menu.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
Input,
2323
OnDestroy,
2424
Output,
25+
provideCheckNoChangesConfig,
2526
Provider,
2627
QueryList,
2728
TemplateRef,
@@ -68,6 +69,7 @@ describe('MatMenu', () => {
6869
): ComponentFixture<T> {
6970
TestBed.configureTestingModule({
7071
providers: [
72+
provideCheckNoChangesConfig({exhaustive: false}),
7173
...providers,
7274
{provide: MATERIAL_ANIMATIONS, useValue: {animationsDisabled: true}},
7375
],

src/material/radio/radio.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {dispatchFakeEvent} from '@angular/cdk/testing/private';
2-
import {Component, DebugElement, ViewChild} from '@angular/core';
2+
import {Component, DebugElement, provideCheckNoChangesConfig, ViewChild} from '@angular/core';
33
import {ComponentFixture, TestBed, fakeAsync, tick, waitForAsync} from '@angular/core/testing';
44
import {FormControl, FormsModule, NgModel, ReactiveFormsModule} from '@angular/forms';
55
import {By} from '@angular/platform-browser';
@@ -14,6 +14,7 @@ import {
1414
describe('MatRadio', () => {
1515
beforeEach(waitForAsync(() => {
1616
TestBed.configureTestingModule({
17+
providers: [provideCheckNoChangesConfig({exhaustive: false})],
1718
imports: [
1819
MatRadioModule,
1920
FormsModule,

0 commit comments

Comments
 (0)