Skip to content

Commit fd6bd6f

Browse files
committed
test: test lazy-loading syntax for VE and Ivy
1 parent 430c003 commit fd6bd6f

File tree

1 file changed

+57
-17
lines changed

1 file changed

+57
-17
lines changed

tests/legacy-cli/e2e/tests/ivy/ivy-lazy-load.ts renamed to tests/legacy-cli/e2e/tests/build/lazy-load-syntax.ts

Lines changed: 57 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,35 @@
55
* Use of this source code is governed by an MIT-style license that can be
66
* found in the LICENSE file at https://angular.io/license
77
*/
8-
import { readFile, replaceInFile, writeFile } from '../../utils/fs';
8+
import { getGlobalVariable } from '../../utils/env';
9+
import { prependToFile, readFile, replaceInFile, writeFile } from '../../utils/fs';
910
import { ng } from '../../utils/process';
10-
import { createProject, updateJsonFile } from '../../utils/project';
11+
import { updateJsonFile } from '../../utils/project';
1112
import { expectToFail } from '../../utils/utils';
1213

1314
export default async function () {
14-
const projectName = 'ivy-lazy-loading';
15+
const argv = getGlobalVariable('argv');
16+
const ivyProject = argv['ivy'];
17+
const projectName = 'test-project';
1518
const appRoutingModulePath = 'src/app/app-routing.module.ts';
1619

17-
// Make Ivy project.
18-
await createProject(projectName, '--enable-ivy', '--routing');
20+
// Add app routing.
21+
// This is done automatically on a new app with --routing.
22+
await writeFile(appRoutingModulePath, `
23+
import { NgModule } from '@angular/core';
24+
import { Routes, RouterModule } from '@angular/router';
25+
26+
const routes: Routes = [];
27+
28+
@NgModule({
29+
imports: [RouterModule.forRoot(routes)],
30+
exports: [RouterModule]
31+
})
32+
export class AppRoutingModule { }
33+
`);
34+
await prependToFile('src/app/app.module.ts',
35+
`import { AppRoutingModule } from './app-routing.module';`);
36+
await replaceInFile('src/app/app.module.ts', `imports: [`, `imports: [ AppRoutingModule,`);
1937

2038
const originalAppRoutingModule = await readFile(appRoutingModulePath);
2139
// helper to replace loadChildren
@@ -57,8 +75,10 @@ export default async function () {
5775

5876
// Set factory shims to false.
5977
await updateJsonFile('tsconfig.app.json', json => {
60-
const angularCompilerOptions = json['angularCompilerOptions'];
61-
angularCompilerOptions['allowEmptyCodegenFiles'] = false;
78+
if (json['angularCompilerOptions'] === undefined) {
79+
json['angularCompilerOptions'] = {};
80+
}
81+
json['angularCompilerOptions']['allowEmptyCodegenFiles'] = false;
6282
});
6383

6484
// Convert the default config to use JIT and prod to just do AOT.
@@ -69,22 +89,42 @@ export default async function () {
6989
buildTarget['configurations']['production'] = { aot: true };
7090
});
7191

72-
// Test `import()` style lazy load.
73-
await replaceLoadChildren(`() => import('./lazy/lazy.module').then(m => m.LazyModule)`);
74-
await ng('e2e');
75-
await ng('e2e', '--prod');
76-
7792
// Test string import with factory shims.
7893
await replaceLoadChildren(`'./lazy/lazy.module#LazyModule'`);
7994
await replaceInFile('tsconfig.app.json', `"allowEmptyCodegenFiles": false`,
8095
`"allowEmptyCodegenFiles": true`);
81-
await expectToFail(() => ng('e2e')); // Currently broken.
82-
await ng('e2e', '--prod');
96+
if (ivyProject) {
97+
// Ivy should not support the string syntax.
98+
await expectToFail(() => ng('e2e'));
99+
await expectToFail(() => ng('e2e', '--prod'));
100+
} else {
101+
// View engine should support the string syntax.
102+
await ng('e2e');
103+
await ng('e2e', '--prod');
104+
}
83105

84106
// Test string import without factory shims.
85107
await replaceLoadChildren(`'./lazy/lazy.module#LazyModule'`);
86108
await replaceInFile('tsconfig.app.json', `"allowEmptyCodegenFiles": true`,
87-
`"allowEmptyCodegenFiles": false`);
88-
await expectToFail(() => ng('e2e')); // Not supported.
89-
await expectToFail(() => ng('e2e', '--prod')); // Not supported.
109+
`"allowEmptyCodegenFiles": false`);
110+
if (ivyProject) {
111+
// Ivy should not support the string syntax.
112+
await expectToFail(() => ng('e2e'));
113+
await expectToFail(() => ng('e2e', '--prod'));
114+
} else {
115+
// View engine should support the string syntax.
116+
await ng('e2e');
117+
await ng('e2e', '--prod');
118+
}
119+
120+
// Test `import()` style lazy load.
121+
await updateJsonFile('angular.json', json => {
122+
// Add the experimental flag to import factories in View Engine.
123+
const buildTarget = json['projects'][projectName]['architect']['build'];
124+
buildTarget['options']['experimentalImportFactories'] = true;
125+
});
126+
// Both Ivy and View Engine should support it.
127+
await replaceLoadChildren(`() => import('./lazy/lazy.module').then(m => m.LazyModule)`);
128+
await ng('e2e');
129+
await ng('e2e', '--prod');
90130
}

0 commit comments

Comments
 (0)