From e8a57f0ee6883e0efbb97d6372922b4ebe307026 Mon Sep 17 00:00:00 2001 From: George Kalpakas Date: Thu, 10 Jan 2019 17:18:05 +0200 Subject: [PATCH] test(upgrade): log more info to help debug CI flakes (#28045) Related Jira issue: FW-939 PR Close #28045 --- .../upgrade/src/static/angular1_providers.ts | 4 ++-- .../test/static/angular1_providers_spec.ts | 21 ++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/upgrade/src/static/angular1_providers.ts b/packages/upgrade/src/static/angular1_providers.ts index 3481f96e8a..ad5d937845 100644 --- a/packages/upgrade/src/static/angular1_providers.ts +++ b/packages/upgrade/src/static/angular1_providers.ts @@ -12,7 +12,7 @@ import * as angular from '../common/angular1'; // We store the ng1 injector so that the provider in the module injector can access it // Then we "get" the ng1 injector from the module injector, which triggers the provider to read // the stored injector and release the reference to it. -let tempInjectorRef: angular.IInjectorService|null; +let tempInjectorRef: angular.IInjectorService|null = null; export function setTempInjectorRef(injector: angular.IInjectorService) { tempInjectorRef = injector; } @@ -21,7 +21,7 @@ export function injectorFactory() { throw new Error('Trying to get the AngularJS injector before it being set.'); } - const injector: angular.IInjectorService|null = tempInjectorRef; + const injector: angular.IInjectorService = tempInjectorRef; tempInjectorRef = null; // clear the value to prevent memory leaks return injector; } diff --git a/packages/upgrade/test/static/angular1_providers_spec.ts b/packages/upgrade/test/static/angular1_providers_spec.ts index b43b524cc0..0662d36c72 100644 --- a/packages/upgrade/test/static/angular1_providers_spec.ts +++ b/packages/upgrade/test/static/angular1_providers_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {Ng1Token} from '@angular/upgrade/static/src/common/angular1'; +import {IInjectorService, Ng1Token} from '@angular/upgrade/static/src/common/angular1'; import {compileFactory, injectorFactory, parseFactory, rootScopeFactory, setTempInjectorRef} from '@angular/upgrade/static/src/static/angular1_providers'; { @@ -22,19 +22,30 @@ import {compileFactory, injectorFactory, parseFactory, rootScopeFactory, setTemp describe('injectorFactory', () => { it('should return the injector value that was previously set', () => { - const mockInjector = {get: () => {}, has: () => false}; + const mockInjector = {get: () => undefined, has: () => false}; setTempInjectorRef(mockInjector); const injector = injectorFactory(); expect(injector).toBe(mockInjector); }); it('should throw if the injector value has not been set yet', () => { - const mockInjector = {get: () => {}, has: () => false}; - expect(injectorFactory).toThrowError(); + let injector: IInjectorService|null = null; + + try { + injector = injectorFactory(); + } catch { + // Throwing an error is the expected behavior. + return; + } + + // Normally, we should never get here (but sometimes we do on CI). + // Log some info to help debug the issue. + console.error(`Unexpected injector (${typeof injector}):`, injector); + fail(`Expected no injector, but got: ${jasmine.pp(injector)}`); }); it('should unset the injector after the first call (to prevent memory leaks)', () => { - const mockInjector = {get: () => {}, has: () => false}; + const mockInjector = {get: () => undefined, has: () => false}; setTempInjectorRef(mockInjector); injectorFactory(); expect(injectorFactory).toThrowError(); // ...because it has been unset