mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-18 20:02:40 +08:00
Migrates the schematics-cli tests to `rules_js`. Notably a little extra logic was needed here as the tests were relying on the built npm package at runtime, resolvable via it's "package name". To address this, we manually link the package for the test at runtime. The spec file is moved into a separate folder for this reason, so that we don't accidentally expose the schematics CLI package for unexpected reasons.
75 lines
2.5 KiB
TypeScript
75 lines
2.5 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.dev/license
|
|
*/
|
|
|
|
import { main } from '../bin/schematics';
|
|
|
|
// We only care about the write method in these mocks of NodeJS.WriteStream.
|
|
class MockWriteStream {
|
|
lines: string[] = [];
|
|
write(str: string) {
|
|
// Strip color control characters.
|
|
this.lines.push(str.replace(/[^\x20-\x7F]\[\d+m/g, ''));
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
describe('schematics-cli binary', () => {
|
|
let stdout: MockWriteStream, stderr: MockWriteStream;
|
|
|
|
beforeEach(() => {
|
|
stdout = new MockWriteStream();
|
|
stderr = new MockWriteStream();
|
|
});
|
|
|
|
it('list-schematics works', async () => {
|
|
const args = ['--list-schematics'];
|
|
const res = await main({ args, stdout, stderr });
|
|
expect(stdout.lines).toMatch(/blank/);
|
|
expect(stdout.lines).toMatch(/schematic/);
|
|
expect(res).toEqual(0);
|
|
});
|
|
|
|
it('errors when using camel case listSchematics', async () => {
|
|
const args = ['--listSchematics'];
|
|
await expectAsync(main({ args, stdout, stderr })).toBeRejectedWithError(
|
|
'Unknown argument listSchematics. Did you mean list-schematics?',
|
|
);
|
|
});
|
|
|
|
it('dry-run works', async () => {
|
|
const args = ['blank', 'foo', '--dry-run'];
|
|
const res = await main({ args, stdout, stderr });
|
|
expect(stdout.lines).toMatch(/CREATE foo\/README.md/);
|
|
expect(stdout.lines).toMatch(/CREATE foo\/.gitignore/);
|
|
expect(stdout.lines).toMatch(/CREATE foo\/src\/foo\/index.ts/);
|
|
expect(stdout.lines).toMatch(/CREATE foo\/src\/foo\/index_spec.ts/);
|
|
expect(stdout.lines).toMatch(/Dry run enabled./);
|
|
expect(res).toEqual(0);
|
|
});
|
|
|
|
it('dry-run is default when debug mode', async () => {
|
|
const args = ['blank', 'foo', '--debug'];
|
|
const res = await main({ args, stdout, stderr });
|
|
expect(stdout.lines).toMatch(/Debug mode enabled./);
|
|
expect(stdout.lines).toMatch(/CREATE foo\/README.md/);
|
|
expect(stdout.lines).toMatch(/CREATE foo\/.gitignore/);
|
|
expect(stdout.lines).toMatch(/CREATE foo\/src\/foo\/index.ts/);
|
|
expect(stdout.lines).toMatch(/CREATE foo\/src\/foo\/index_spec.ts/);
|
|
expect(stdout.lines).toMatch(/Dry run enabled by default in debug mode./);
|
|
expect(res).toEqual(0);
|
|
});
|
|
|
|
it('error when no name is provided', async () => {
|
|
const args = ['blank'];
|
|
const res = await main({ args, stdout, stderr });
|
|
expect(stderr.lines).toMatch(/Error: name option is required/);
|
|
expect(res).toEqual(1);
|
|
});
|
|
});
|