Skip to content

Commit 16d1700

Browse files
guillaumebarrancomhevery
authored andcommitted
fix(core): add stacktrace in log when error during cleanup component in TestBed (#22162)
PR Close #22162
1 parent b75cf3f commit 16d1700

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

packages/core/test/linker/jit_summaries_integration_spec.ts

+30-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import {ResourceLoader} from '@angular/compiler';
1010
import {CompileMetadataResolver} from '@angular/compiler/src/metadata_resolver';
1111
import {MockResourceLoader} from '@angular/compiler/testing/src/resource_loader_mock';
12-
import {Component, Directive, Injectable, NgModule, Pipe, Type} from '@angular/core';
12+
import {Component, Directive, Injectable, NgModule, OnDestroy, Pipe, Type} from '@angular/core';
1313
import {TestBed, async, getTestBed} from '@angular/core/testing';
1414
import {expect} from '@angular/platform-browser/testing/src/matchers';
1515

@@ -56,6 +56,10 @@ import {expect} from '@angular/platform-browser/testing/src/matchers';
5656
constructor(service: SomeService) {}
5757
}
5858

59+
@Component({template: ''})
60+
class TestCompErrorOnDestroy implements OnDestroy {
61+
ngOnDestroy() {}
62+
}
5963

6064
function resetTestEnvironmentWithSummaries(summaries?: () => any[]) {
6165
const {platform, ngModule} = getTestBed();
@@ -207,6 +211,31 @@ import {expect} from '@angular/platform-browser/testing/src/matchers';
207211
.toThrowError('SomeModule was AOT compiled, so its metadata cannot be changed.');
208212
});
209213

214+
it('should return stack trace and component data on resetTestingModule when error is thrown',
215+
() => {
216+
resetTestEnvironmentWithSummaries();
217+
218+
const fixture = TestBed.configureTestingModule({declarations: [TestCompErrorOnDestroy]})
219+
.createComponent<TestCompErrorOnDestroy>(TestCompErrorOnDestroy);
220+
221+
const expectedError = 'Error from ngOnDestroy';
222+
223+
const component: TestCompErrorOnDestroy = fixture.componentInstance;
224+
225+
spyOn(console, 'error');
226+
spyOn(component, 'ngOnDestroy').and.throwError(expectedError);
227+
228+
const expectedObject = {
229+
stacktrace: new Error(expectedError),
230+
component,
231+
};
232+
233+
TestBed.resetTestingModule();
234+
235+
expect(console.error)
236+
.toHaveBeenCalledWith('Error during cleanup of component', expectedObject);
237+
});
238+
210239
it('should allow to add summaries via configureTestingModule', () => {
211240
resetTestEnvironmentWithSummaries();
212241

packages/core/testing/src/test_bed.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,10 @@ export class TestBed implements Injector {
287287
try {
288288
fixture.destroy();
289289
} catch (e) {
290-
console.error('Error during cleanup of component', fixture.componentInstance);
290+
console.error('Error during cleanup of component', {
291+
component: fixture.componentInstance,
292+
stacktrace: e,
293+
});
291294
}
292295
});
293296
this._activeFixtures = [];

0 commit comments

Comments
 (0)