nx/e2e/angular-package.test.ts
Juri c27b33a6ec fix(angular): check for devDeps & peerDeps when writing package version for dep libs
when determining the package version of dependent libraries, make sure that there's no devDeps or
peerDep already set. In such case don't touch the package.json
2020-02-04 15:23:22 -05:00

117 lines
3.5 KiB
TypeScript

import { toClassName } from '@nrwl/workspace';
import {
ensureProject,
forEachCli,
readJson,
runCLI,
uniq,
updateFile
} from './utils';
forEachCli('angular', cli => {
describe('Build Angular library', () => {
/**
* Graph:
*
* childLib
* /
* parentLib =>
* \
* \
* childLib2
*
*/
let parentLib: string;
let childLib: string;
let childLib2: string;
beforeEach(() => {
parentLib = uniq('parentlib');
childLib = uniq('childlib');
childLib2 = uniq('childlib2');
ensureProject();
runCLI(
`generate @nrwl/angular:library ${parentLib} --publishable=true --no-interactive`
);
runCLI(
`generate @nrwl/angular:library ${childLib} --publishable=true --no-interactive`
);
runCLI(
`generate @nrwl/angular:library ${childLib2} --publishable=true --no-interactive`
);
// create dependencies by importing
const createDep = (parent, children: string[]) => {
updateFile(
`libs/${parent}/src/lib/${parent}.module.ts`,
`
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
${children
.map(
entry =>
`import { ${toClassName(
entry
)}Module } from '@proj/${entry}';`
)
.join('\n')}
@NgModule({
imports: [CommonModule, ${children
.map(entry => `${toClassName(entry)}Module`)
.join(',')}]
})
export class ${toClassName(parent)}Module {}
`
);
};
createDep(parentLib, [childLib, childLib2]);
});
it('should throw an error if the dependent library has not been built before building the parent lib', () => {
expect.assertions(2);
try {
runCLI(`build ${parentLib}`);
} catch (e) {
expect(e.stderr.toString()).toContain(
`Some of the library ${parentLib}'s dependencies have not been built yet. Please build these libraries before:`
);
expect(e.stderr.toString()).toContain(`${childLib}`);
}
});
it('should build the library when it does not have any deps', () => {
const parentLibOutput = runCLI(`build ${childLib}`);
expect(parentLibOutput).toContain(`Built @proj/${childLib}`);
});
it('should properly add references to any dependency into the parent package.json', () => {
const childLibOutput = runCLI(`build ${childLib}`);
const childLib2Output = runCLI(`build ${childLib2}`);
const parentLibOutput = runCLI(`build ${parentLib}`);
expect(childLibOutput).toContain(`Built @proj/${childLib}`);
expect(childLib2Output).toContain(`Built @proj/${childLib2}`);
expect(parentLibOutput).toContain(`Built @proj/${parentLib}`);
// assert package.json deps have been set
const assertPackageJson = (
parent: string,
lib: string,
version: string
) => {
const jsonFile = readJson(`dist/libs/${parent}/package.json`);
const childDependencyVersion = jsonFile.dependencies[`@proj/${lib}`];
expect(childDependencyVersion).toBe(version);
};
assertPackageJson(parentLib, childLib, '0.0.1');
assertPackageJson(parentLib, childLib2, '0.0.1');
});
});
});