feat(core): introduce fixture.whenRenderingDone for testing (#16732)

This commit is contained in:
Matias Niemelä 2017-05-12 16:49:16 -04:00 committed by Jason Aden
parent 06264645fd
commit 38c524d655
3 changed files with 28 additions and 0 deletions

View File

@ -158,6 +158,25 @@ export function main() {
});
}));
it('should signal through whenRenderingDone when the fixture is stable', async(() => {
const componentFixture = TestBed.createComponent(AsyncComp);
componentFixture.detectChanges();
expect(componentFixture.nativeElement).toHaveText('1');
const element = componentFixture.debugElement.children[0];
dispatchEvent(element.nativeElement, 'click');
expect(componentFixture.nativeElement).toHaveText('1');
// Component is updated asynchronously. Wait for the fixture to become stable
// before checking.
componentFixture.whenRenderingDone().then((waited) => {
expect(waited).toBe(true);
componentFixture.detectChanges();
expect(componentFixture.nativeElement).toHaveText('11');
});
}));
it('should wait for macroTask(setTimeout) while checking for whenStable ' +
'(autoDetectChanges)',
async(() => {

View File

@ -160,6 +160,14 @@ export class ComponentFixture<T> {
}
}
/**
* Get a promise that resolves when the ui state is stable following animations.
*/
whenRenderingDone(): Promise<any> {
// this is temporary until this is functional
return this.whenStable();
}
/**
* Trigger component destruction.
*/

View File

@ -16,6 +16,7 @@ export declare class ComponentFixture<T> {
destroy(): void;
detectChanges(checkNoChanges?: boolean): void;
isStable(): boolean;
whenRenderingDone(): Promise<any>;
whenStable(): Promise<any>;
}