Skip to content

Commit c26c24c

Browse files
jpvanhalchuckjaz
authored andcommitted
fix(upgrade): fix registerForNg1Tests (#13522)
Fix an issue in `registerForNg1Tests`, where it passes a `null` as `ng1Injector` to `_bootstrapDone`. This causes a "TypeError: Cannot read property 'get' of null" to be thrown from `_bootstrapDone`.
1 parent 3f17841 commit c26c24c

File tree

3 files changed

+55
-9
lines changed

3 files changed

+55
-9
lines changed

karma-js.conf.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,25 @@ module.exports = function(config) {
2424
'node_modules/core-js/client/core.js',
2525
// include Angular v1 for upgrade module testing
2626
'node_modules/angular/angular.js',
27-
28-
'node_modules/zone.js/dist/zone.js', 'node_modules/zone.js/dist/long-stack-trace-zone.js',
29-
'node_modules/zone.js/dist/proxy.js', 'node_modules/zone.js/dist/sync-test.js',
30-
'node_modules/zone.js/dist/jasmine-patch.js', 'node_modules/zone.js/dist/async-test.js',
27+
'node_modules/angular-mocks/angular-mocks.js',
28+
29+
'node_modules/zone.js/dist/zone.js',
30+
'node_modules/zone.js/dist/long-stack-trace-zone.js',
31+
'node_modules/zone.js/dist/proxy.js',
32+
'node_modules/zone.js/dist/sync-test.js',
33+
'node_modules/zone.js/dist/jasmine-patch.js',
34+
'node_modules/zone.js/dist/async-test.js',
3135
'node_modules/zone.js/dist/fake-async-test.js',
3236

3337
// Including systemjs because it defines `__eval`, which produces correct stack traces.
34-
'shims_for_IE.js', 'node_modules/systemjs/dist/system.src.js',
38+
'shims_for_IE.js',
39+
'node_modules/systemjs/dist/system.src.js',
3540
{pattern: 'node_modules/rxjs/**', included: false, watched: false, served: true},
36-
'node_modules/reflect-metadata/Reflect.js', 'tools/build/file2modulename.js', 'test-main.js',
37-
{pattern: 'dist/all/empty.*', included: false, watched: false}, {
41+
'node_modules/reflect-metadata/Reflect.js',
42+
'tools/build/file2modulename.js',
43+
'test-main.js',
44+
{pattern: 'dist/all/empty.*', included: false, watched: false},
45+
{
3846
pattern: 'modules/@angular/platform-browser/test/static_assets/**',
3947
included: false,
4048
watched: false

modules/@angular/upgrade/src/upgrade_adapter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ export class UpgradeAdapter {
320320
windowNgMock.module(this.ng1Module.name);
321321
const upgrade = new UpgradeAdapterRef();
322322
this.ng2BootstrapDeferred.promise.then(
323-
() => { (<any>upgrade)._bootstrapDone(this.moduleRef, upgrade.ng1Injector); }, onError);
323+
(ng1Injector) => { (<any>upgrade)._bootstrapDone(this.moduleRef, ng1Injector); }, onError);
324324
return upgrade;
325325
}
326326

modules/@angular/upgrade/test/upgrade_spec.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {async, fakeAsync, flushMicrotasks, tick} from '@angular/core/testing';
1111
import {BrowserModule} from '@angular/platform-browser';
1212
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
1313
import * as angular from '@angular/upgrade/src/angular_js';
14-
import {UpgradeAdapter, sortProjectableNodes} from '@angular/upgrade/src/upgrade_adapter';
14+
import {UpgradeAdapter, UpgradeAdapterRef, sortProjectableNodes} from '@angular/upgrade/src/upgrade_adapter';
1515

1616
export function main() {
1717
describe('adapter: ng1 to ng2', () => {
@@ -1296,6 +1296,44 @@ export function main() {
12961296
});
12971297
}));
12981298
});
1299+
1300+
describe('registerForNg1Tests', () => {
1301+
let upgradeAdapterRef: UpgradeAdapterRef;
1302+
let $compile: angular.ICompileService;
1303+
let $rootScope: angular.IRootScopeService;
1304+
1305+
beforeEach(() => {
1306+
const ng1Module = angular.module('ng1', []);
1307+
1308+
const Ng2 = Component({
1309+
selector: 'ng2',
1310+
template: 'Hello World',
1311+
}).Class({constructor: function() {}});
1312+
1313+
const Ng2Module = NgModule({declarations: [Ng2], imports: [BrowserModule]}).Class({
1314+
constructor: function() {}
1315+
});
1316+
1317+
const upgradeAdapter = new UpgradeAdapter(Ng2Module);
1318+
ng1Module.directive('ng2', upgradeAdapter.downgradeNg2Component(Ng2));
1319+
1320+
upgradeAdapterRef = upgradeAdapter.registerForNg1Tests(['ng1']);
1321+
});
1322+
1323+
beforeEach(
1324+
inject((_$compile_: angular.ICompileService, _$rootScope_: angular.IRootScopeService) => {
1325+
$compile = _$compile_;
1326+
$rootScope = _$rootScope_;
1327+
}));
1328+
1329+
it('should be able to test ng1 components that use ng2 components', async(() => {
1330+
upgradeAdapterRef.ready(() => {
1331+
const element = $compile('<ng2></ng2>')($rootScope);
1332+
$rootScope.$digest();
1333+
expect(element[0].textContent).toContain('Hello World');
1334+
});
1335+
}));
1336+
});
12991337
});
13001338

13011339
describe('sortProjectableNodes', () => {

0 commit comments

Comments
 (0)