Skip to content

Commit f1bd252

Browse files
crisbetommalerba
authored andcommitted
test(popover-edit): fix tests leaking overlay containers (#16103)
Fixes instances of `cdk-overlay-container` being leaked after each `popover-edit` test. Aside from leaking memory, this has the potential of throwing off other tests that do things like `querySelector('.cdk-overlay-container .something')`.
1 parent f34bf7e commit f1bd252

File tree

4 files changed

+28
-2
lines changed

4 files changed

+28
-2
lines changed

src/cdk-experimental/popover-edit/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ ng_test_library(
3333
"//src/cdk/keycodes",
3434
"//src/cdk/table",
3535
"//src/cdk/testing",
36+
"//src/cdk/overlay",
3637
],
3738
)
3839

src/cdk-experimental/popover-edit/popover-edit.spec.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import {CdkTableModule} from '@angular/cdk/table';
44
import {dispatchKeyboardEvent} from '@angular/cdk/testing';
55
import {CommonModule} from '@angular/common';
66
import {Component, ElementRef, Type, ViewChild} from '@angular/core';
7-
import {ComponentFixture, fakeAsync, flush, TestBed, tick} from '@angular/core/testing';
7+
import {ComponentFixture, fakeAsync, flush, TestBed, tick, inject} from '@angular/core/testing';
88
import {FormsModule, NgForm} from '@angular/forms';
99
import {BidiModule, Direction} from '@angular/cdk/bidi';
10+
import {OverlayContainer} from '@angular/cdk/overlay';
1011
import {BehaviorSubject} from 'rxjs';
1112

1213
import {CdkPopoverEditColspan, CdkPopoverEditModule, PopoverEditClickOutBehavior} from './index';
@@ -322,17 +323,28 @@ describe('CDK Popover Edit', () => {
322323
describe(label, () => {
323324
let component: BaseTestComponent;
324325
let fixture: ComponentFixture<BaseTestComponent>;
326+
let overlayContainer: OverlayContainer;
325327

326328
beforeEach(() => {
327329
TestBed.configureTestingModule({
328330
imports: [CdkTableModule, CdkPopoverEditModule, CommonModule, FormsModule, BidiModule],
329331
declarations: [componentClass],
330332
}).compileComponents();
333+
inject([OverlayContainer], (oc: OverlayContainer) => {
334+
overlayContainer = oc;
335+
})();
331336
fixture = TestBed.createComponent(componentClass);
332337
component = fixture.componentInstance;
333338
fixture.detectChanges();
334339
});
335340

341+
afterEach(() => {
342+
// The overlay container's `ngOnDestroy` won't be called between test runs so we need
343+
// to call it ourselves, in order to avoid leaking containers between tests and potentially
344+
// throwing `querySelector` calls.
345+
overlayContainer.ngOnDestroy();
346+
});
347+
336348
describe('triggering edit', () => {
337349
it('shows and hides on-hover content only after a delay', fakeAsync(() => {
338350
const [row0, row1] = component.getRows();

src/material-experimental/popover-edit/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ ng_test_library(
3333
"//src/cdk/collections",
3434
"//src/cdk/keycodes",
3535
"//src/cdk/testing",
36+
"//src/cdk/overlay",
3637
"//src/cdk-experimental/popover-edit",
3738
"//src/material/table",
3839
],

src/material-experimental/popover-edit/popover-edit.spec.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import {MatTableModule} from '@angular/material/table';
44
import {dispatchKeyboardEvent} from '@angular/cdk/testing';
55
import {CommonModule} from '@angular/common';
66
import {Component, ElementRef, Type, ViewChild} from '@angular/core';
7-
import {ComponentFixture, fakeAsync, flush, TestBed, tick} from '@angular/core/testing';
7+
import {ComponentFixture, fakeAsync, flush, TestBed, tick, inject} from '@angular/core/testing';
88
import {FormsModule, NgForm} from '@angular/forms';
9+
import {OverlayContainer} from '@angular/cdk/overlay';
910
import {BehaviorSubject} from 'rxjs';
1011

1112
import {
@@ -263,17 +264,28 @@ describe('Material Popover Edit', () => {
263264
describe(label, () => {
264265
let component: BaseTestComponent;
265266
let fixture: ComponentFixture<BaseTestComponent>;
267+
let overlayContainer: OverlayContainer;
266268

267269
beforeEach(() => {
268270
TestBed.configureTestingModule({
269271
imports: [MatTableModule, MatPopoverEditModule, CommonModule, FormsModule],
270272
declarations: [componentClass],
271273
}).compileComponents();
274+
inject([OverlayContainer], (oc: OverlayContainer) => {
275+
overlayContainer = oc;
276+
})();
272277
fixture = TestBed.createComponent(componentClass);
273278
component = fixture.componentInstance;
274279
fixture.detectChanges();
275280
});
276281

282+
afterEach(() => {
283+
// The overlay container's `ngOnDestroy` won't be called between test runs so we need
284+
// to call it ourselves, in order to avoid leaking containers between tests and potentially
285+
// throwing `querySelector` calls.
286+
overlayContainer.ngOnDestroy();
287+
});
288+
277289
describe('triggering edit', () => {
278290
it('shows and hides on-hover content only after a delay', fakeAsync(() => {
279291
const [row0, row1] = component.getRows();

0 commit comments

Comments
 (0)