fix(testing): add root karma config if one isn't present when using karma-project generator (#9485)

when using the karma-project generator directory ensure the karma generator (install deps/root
config) is called if the root karma config isn't present

ISSUES CLOSED: #9234
This commit is contained in:
Caleb Ukle 2022-03-25 16:05:08 -05:00 committed by GitHub
parent 167b57a189
commit c12a647c11
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 53 additions and 22 deletions

View File

@ -661,6 +661,11 @@
"description": "Skip formatting files.", "description": "Skip formatting files.",
"type": "boolean", "type": "boolean",
"default": false "default": false
},
"skipPackageJson": {
"description": "Skip updating package.json.",
"type": "boolean",
"default": false
} }
}, },
"additionalProperties": false, "additionalProperties": false,

View File

@ -41,11 +41,13 @@ describe('karmaProject', () => {
}); });
it('should generate files', async () => { it('should generate files', async () => {
expect(tree.exists('karma.conf.js')).toBeFalsy();
await karmaProjectGenerator(tree, { project: 'lib1' }); await karmaProjectGenerator(tree, { project: 'lib1' });
expect(tree.exists('/libs/lib1/karma.conf.js')).toBeTruthy(); expect(tree.exists('/libs/lib1/karma.conf.js')).toBeTruthy();
expect(tree.exists('/libs/lib1/tsconfig.spec.json')).toBeTruthy(); expect(tree.exists('/libs/lib1/tsconfig.spec.json')).toBeTruthy();
expect(tree.exists('/libs/lib1/src/test.ts')).toBeTruthy(); expect(tree.exists('/libs/lib1/src/test.ts')).toBeTruthy();
expect(tree.exists('karma.conf.js')).toBeTruthy();
}); });
it('should create a karma.conf.js', async () => { it('should create a karma.conf.js', async () => {

View File

@ -5,11 +5,13 @@ import { generateKarmaProjectFiles } from './lib/generate-karma-project-files';
import { updateTsConfigs } from './lib/update-tsconfig'; import { updateTsConfigs } from './lib/update-tsconfig';
import { updateWorkspaceConfig } from './lib/update-workspace-config'; import { updateWorkspaceConfig } from './lib/update-workspace-config';
import type { KarmaProjectOptions } from './schema'; import type { KarmaProjectOptions } from './schema';
import { karmaGenerator } from '../karma/karma';
export async function karmaProjectGenerator( export async function karmaProjectGenerator(
tree: Tree, tree: Tree,
options: KarmaProjectOptions options: KarmaProjectOptions
) { ) {
karmaGenerator(tree, options);
checkProjectTestTarget(tree, options.project); checkProjectTestTarget(tree, options.project);
generateKarmaProjectFiles(tree, options.project); generateKarmaProjectFiles(tree, options.project);
updateTsConfigs(tree, options.project); updateTsConfigs(tree, options.project);

View File

@ -1,4 +1,5 @@
export interface KarmaProjectOptions { export interface KarmaProjectOptions {
project: string; project: string;
skipFormat?: boolean; skipFormat?: boolean;
skipPackageJson?: boolean;
} }

View File

@ -17,6 +17,11 @@
"description": "Skip formatting files.", "description": "Skip formatting files.",
"type": "boolean", "type": "boolean",
"default": false "default": false
},
"skipPackageJson": {
"description": "Skip updating package.json.",
"type": "boolean",
"default": false
} }
}, },
"additionalProperties": false, "additionalProperties": false,

View File

@ -9,7 +9,21 @@ describe('karma', () => {
tree = createTreeWithEmptyWorkspace(); tree = createTreeWithEmptyWorkspace();
}); });
it('should do nothing when karma is already installed', () => { it('should do nothing when karma is already installed and karma.conf.js exists', () => {
jest.spyOn(devkit, 'generateFiles');
jest.spyOn(devkit, 'addDependenciesToPackageJson');
devkit.updateJson(tree, 'package.json', (json) => {
json.devDependencies = { karma: '~5.0.0' };
return json;
});
tree.write('karma.conf.js', '');
karmaGenerator(tree, {});
expect(devkit.generateFiles).not.toHaveBeenCalled();
expect(devkit.addDependenciesToPackageJson).not.toHaveBeenCalled();
});
it('should create karma.conf.js when karma is installed', () => {
jest.spyOn(devkit, 'generateFiles'); jest.spyOn(devkit, 'generateFiles');
jest.spyOn(devkit, 'addDependenciesToPackageJson'); jest.spyOn(devkit, 'addDependenciesToPackageJson');
devkit.updateJson(tree, 'package.json', (json) => { devkit.updateJson(tree, 'package.json', (json) => {
@ -19,7 +33,7 @@ describe('karma', () => {
karmaGenerator(tree, {}); karmaGenerator(tree, {});
expect(devkit.generateFiles).not.toHaveBeenCalled(); expect(devkit.generateFiles).toHaveBeenCalled();
expect(devkit.addDependenciesToPackageJson).not.toHaveBeenCalled(); expect(devkit.addDependenciesToPackageJson).not.toHaveBeenCalled();
}); });

View File

@ -9,28 +9,30 @@ import { GeneratorOptions } from './schema';
export function karmaGenerator(tree: Tree, options: GeneratorOptions) { export function karmaGenerator(tree: Tree, options: GeneratorOptions) {
const packageJson = readJson(tree, 'package.json'); const packageJson = readJson(tree, 'package.json');
if (packageJson.devDependencies['karma']) {
return; if (!tree.exists('karma.conf.js')) {
generateFiles(tree, joinPathFragments(__dirname, 'files'), '.', {
tmpl: '',
});
} }
generateFiles(tree, joinPathFragments(__dirname, 'files'), '.', { tmpl: '' }); if (options.skipPackageJson || packageJson.devDependencies['karma']) {
return () => {};
return !options.skipPackageJson }
? addDependenciesToPackageJson( return addDependenciesToPackageJson(
tree, tree,
{}, {},
{ {
karma: '~6.3.0', karma: '~6.3.0',
'karma-chrome-launcher': '~3.1.0', 'karma-chrome-launcher': '~3.1.0',
'karma-coverage': '~2.2.0', 'karma-coverage': '~2.2.0',
'karma-jasmine': '~4.0.0', 'karma-jasmine': '~4.0.0',
'karma-jasmine-html-reporter': '~1.7.0', 'karma-jasmine-html-reporter': '~1.7.0',
'jasmine-core': '~3.10.0', 'jasmine-core': '~3.10.0',
'jasmine-spec-reporter': '~5.0.0', 'jasmine-spec-reporter': '~5.0.0',
'@types/jasmine': '~3.5.0', '@types/jasmine': '~3.5.0',
} }
) );
: () => {};
} }
export default karmaGenerator; export default karmaGenerator;