mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-16 18:43:42 +08:00
test(@angular-devkit/build-angular): add AOT partial compilation E2E test
This adds a new E2E test that creates a library, converts it to use partial AOT compilation (linker mode), and integrates the library into an application. This provides a full workflow test of the new method to produce a publishable Angular library.
This commit is contained in:
parent
35d8adf020
commit
2ba1a71117
@ -0,0 +1,108 @@
|
||||
import { writeFile } from '../../../utils/fs';
|
||||
import { getActivePackageManager } from '../../../utils/packages';
|
||||
import { ng, silentYarn } from '../../../utils/process';
|
||||
import { updateJsonFile } from '../../../utils/project';
|
||||
import { getGlobalVariable } from '../../../utils/env';
|
||||
|
||||
export default async function () {
|
||||
if ((getGlobalVariable('argv')['ve'])) {
|
||||
// Does not apply to ViewEngine
|
||||
return;
|
||||
}
|
||||
|
||||
await ng('generate', 'library', 'my-lib');
|
||||
|
||||
// Ensure webdriver is present for E2E (yarn will remove any downloaded drivers)
|
||||
if (getActivePackageManager() === 'yarn') {
|
||||
await silentYarn('run', 'webdriver-update');
|
||||
}
|
||||
|
||||
// Enable partial compilation mode (linker) for the library
|
||||
// Enable ivy for production as well (current schematic disables ivy in production)
|
||||
await updateJsonFile('projects/my-lib/tsconfig.lib.prod.json', config => {
|
||||
const { angularCompilerOptions = {} } = config;
|
||||
angularCompilerOptions.enableIvy = true;
|
||||
angularCompilerOptions.compilationMode = 'partial';
|
||||
config.angularCompilerOptions = angularCompilerOptions;
|
||||
});
|
||||
|
||||
await writeFile('./src/app/app.module.ts', `
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { MyLibModule } from 'my-lib';
|
||||
|
||||
import { AppComponent } from './app.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
AppComponent
|
||||
],
|
||||
imports: [
|
||||
BrowserModule,
|
||||
MyLibModule,
|
||||
],
|
||||
providers: [],
|
||||
bootstrap: [AppComponent]
|
||||
})
|
||||
export class AppModule { }
|
||||
`);
|
||||
|
||||
await writeFile('./src/app/app.component.ts', `
|
||||
import { Component } from '@angular/core';
|
||||
import { MyLibService } from 'my-lib';
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
template: '<lib-my-lib></lib-my-lib>'
|
||||
})
|
||||
export class AppComponent {
|
||||
title = 'app';
|
||||
|
||||
constructor(myLibService: MyLibService) {
|
||||
console.log(myLibService);
|
||||
}
|
||||
}
|
||||
`);
|
||||
|
||||
await writeFile('e2e/src/app.e2e-spec.ts', `
|
||||
import { browser, logging, element, by } from 'protractor';
|
||||
import { AppPage } from './app.po';
|
||||
|
||||
describe('workspace-project App', () => {
|
||||
let page: AppPage;
|
||||
|
||||
beforeEach(() => {
|
||||
page = new AppPage();
|
||||
});
|
||||
|
||||
it('should display text from library component', async () => {
|
||||
await page.navigateTo();
|
||||
expect(await element(by.css('lib-my-lib p')).getText()).toEqual('my-lib works!');
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
// Assert that there are no errors emitted from the browser
|
||||
const logs = await browser.manage().logs().get(logging.Type.BROWSER);
|
||||
expect(logs).not.toContain(jasmine.objectContaining({
|
||||
level: logging.Level.SEVERE,
|
||||
}));
|
||||
});
|
||||
});
|
||||
`);
|
||||
|
||||
await runLibraryTests();
|
||||
await runLibraryTests(true);
|
||||
}
|
||||
|
||||
async function runLibraryTests(prodMode = false): Promise<void> {
|
||||
const args = ['build', 'my-lib'];
|
||||
if (prodMode) {
|
||||
args.push('--prod');
|
||||
}
|
||||
|
||||
await ng(...args);
|
||||
|
||||
// Check that the tests succeeds both with named project, unnamed (should test app), and prod.
|
||||
await ng('e2e');
|
||||
await ng('e2e', 'test-project', '--devServerTarget=test-project:serve:production');
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user