From a6447d064556508caf606a89ea122c544629b52a Mon Sep 17 00:00:00 2001 From: Rafael Santana Date: Wed, 4 Nov 2020 22:55:07 -0300 Subject: [PATCH 1/2] fix: trigger change detection cycle on rerender --- .../src/lib/testing-library.ts | 4 ++-- .../testing-library/tests/rerender.spec.ts | 23 ++++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/projects/testing-library/src/lib/testing-library.ts b/projects/testing-library/src/lib/testing-library.ts index 8f4067b5..0099faa9 100644 --- a/projects/testing-library/src/lib/testing-library.ts +++ b/projects/testing-library/src/lib/testing-library.ts @@ -1,4 +1,4 @@ -import { Component, Type, NgZone, SimpleChange, OnChanges, SimpleChanges } from '@angular/core'; +import { Component, Type, NgZone, SimpleChange, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -94,7 +94,7 @@ export async function render( function detectChanges() { if (isAlive) { - fixture.detectChanges(); + fixture.componentRef.injector.get(ChangeDetectorRef).detectChanges(); } } diff --git a/projects/testing-library/tests/rerender.spec.ts b/projects/testing-library/tests/rerender.spec.ts index eb15220a..0a1b9c79 100644 --- a/projects/testing-library/tests/rerender.spec.ts +++ b/projects/testing-library/tests/rerender.spec.ts @@ -1,4 +1,5 @@ -import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; +import { screen } from '@testing-library/dom'; import { render } from '../src/public_api'; @Component({ @@ -50,3 +51,23 @@ test('will call ngOnChanges on rerender', async () => { component.getByText(name); expect(nameChanged).toBeCalledWith(name, false); }) + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + selector: 'fixture-onpush', + template: ` +
Number
+ `, +}) +class FixtureWithOnPushComponent { + @Input() activeField: string; +} + +test('update properties on rerender', async () => { + const { rerender } = await render(FixtureWithOnPushComponent); + const numberHtmlElementRef = screen.queryByTestId('number'); + + expect(numberHtmlElementRef).not.toHaveClass('active'); + rerender({ activeField: 'number' }); + expect(numberHtmlElementRef).toHaveClass('active'); +}) From f6b43e3e353f83c40bd69c2454a5c6748986c8dd Mon Sep 17 00:00:00 2001 From: Rafael Santana Date: Wed, 4 Nov 2020 23:02:11 -0300 Subject: [PATCH 2/2] fixup! fix: trigger change detection cycle on rerender --- projects/testing-library/src/lib/testing-library.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/testing-library/src/lib/testing-library.ts b/projects/testing-library/src/lib/testing-library.ts index 0099faa9..b347b1de 100644 --- a/projects/testing-library/src/lib/testing-library.ts +++ b/projects/testing-library/src/lib/testing-library.ts @@ -1,4 +1,4 @@ -import { Component, Type, NgZone, SimpleChange, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core'; +import { ChangeDetectorRef, Component, Type, NgZone, SimpleChange, OnChanges, SimpleChanges } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -94,7 +94,7 @@ export async function render( function detectChanges() { if (isAlive) { - fixture.componentRef.injector.get(ChangeDetectorRef).detectChanges(); + fixture.detectChanges(); } } @@ -117,7 +117,7 @@ export async function render( fixture.componentInstance.ngOnChanges(changes); } - detectChanges(); + fixture.componentRef.injector.get(ChangeDetectorRef).detectChanges(); }; const inject = TestBed.inject || TestBed.get;