message: test(ivy): mark tests where checkNoChanges results are different in the view engine and ivy
  PR Close
diff: @@ -13,7 +13,7 @@ import {ComponentFixture, TestBed, fakeAsync} from '@angular/core/testing';
  import {By} from '@angular/platform-browser/src/dom/debug/by';
  import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter';
  import {expect} from '@angular/platform-browser/testing/src/matchers';
  -import {fixmeIvy, ivyEnabled, modifiedInIvy} from '@angular/private/testing';
  +import {fixmeIvy, ivyEnabled, modifiedInIvy, onlyInIvy} from '@angular/private/testing';
  export function createUrlResolverWithoutPackagePrefix(): UrlResolver {
  return new UrlResolver();
  @@ -1184,7 +1184,7 @@ const TEST_COMPILER_PROVIDERS: Provider[] = [
  });
  describe('enforce no new changes', () => {
  - fixmeIvy('FW-823: ComponentFixture.checkNoChanges doesn\'t throw under TestBed')
  + modifiedInIvy('checkNoChanges has no effect before first change detection run')
  .it('should throw when a record gets changed after it has been checked', fakeAsync(() => {
  @Directive({selector: '[changed]'})
  class ChangingDirective {
  @@ -1202,6 +1202,30 @@ const TEST_COMPILER_PROVIDERS: Provider[] = [
  /Previous value: 'changed: undefined'\. Current value: 'changed: 1'/g);
  }));
  +
  + onlyInIvy('checkNoChanges has no effect before first change detection run')
  + .it('should throw when a record gets changed after the first change detection pass',
  + fakeAsync(() => {
  + @Directive({selector: '[changed]'})
  + class ChangingDirective {
  + @Input() changed: any;
  + }
  +
  + TestBed.configureTestingModule({declarations: [ChangingDirective]});
  +
  + const ctx = createCompFixture('<div [someProp]="a" [changed]="b"></div>', TestData);
  +
  + ctx.componentInstance.b = 1;
  + // should not throw here as change detection didn't run yet
  + ctx.checkNoChanges();
  +
  + ctx.detectChanges();
  +
  + ctx.componentInstance.b = 2;
  + expect(() => ctx.checkNoChanges())
  + .toThrowError(/Previous value: '1'\. Current value: '2'/g);
  + }));
  +
  fixmeIvy('FW-831: Views created in a cd hooks throw in view engine')
  .it('should warn when the view has been created in a cd hook', fakeAsync(() => {
  const ctx = createCompFixture('<div *gh9882>{{ a }}</div>', TestData);
  @@ -1219,12 +1243,25 @@ const TEST_COMPILER_PROVIDERS: Provider[] = [
  expect(() => ctx.checkNoChanges()).not.toThrow();
  }));
  - fixmeIvy('FW-823: ComponentFixture.checkNoChanges doesn\'t throw under TestBed')
  + modifiedInIvy('checkNoChanges has no effect before first change detection run')
  .it('should not break the next run', fakeAsync(() => {
  const ctx = _bindSimpleValue('a', TestData);
  ctx.componentInstance.a = 'value';
  expect(() => ctx.checkNoChanges()).toThrow();
  + ctx.detectChanges();
  + expect(renderLog.loggedValues).toEqual(['value']);
  + }));
  +
  + it('should not break the next run (view engine and ivy)', fakeAsync(() => {
  + const ctx = _bindSimpleValue('a', TestData);
  +
  + ctx.detectChanges();
  + renderLog.clear();
  +
  + ctx.componentInstance.a = 'value';
  + expect(() => ctx.checkNoChanges()).toThrow();
  +
  ctx.detectChanges();
  expect(renderLog.loggedValues).toEqual(['value']);
  }));
  