From a7ffce10ee18d069aab3ef6cc010cfb08e77813e Mon Sep 17 00:00:00 2001 From: "S. Iftekhar Hossain" Date: Sun, 7 Feb 2021 06:42:06 +0600 Subject: [PATCH] fix(@angular-devkit/build-angular): fixed ignoring of karma plugins config Previously `karma-coverage` was validated only when in karma plugins config one of these was added ``'karma-coverage'` or `require('karma-coverage')` This change will allow cli to validate `karma-coverage` plugin if in `karma.conf.js` `'karma-*'` is used. Example: ``` plugins: [ ... 'karma-*', require('@angular-devkit/build-angular/plugins/karma'), ... ] ``` Fixes #19993 --- .../build_angular/src/karma/code-coverage_spec.ts | 12 ++++++++++++ .../build_angular/src/webpack/plugins/karma/karma.ts | 12 +++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/angular_devkit/build_angular/src/karma/code-coverage_spec.ts b/packages/angular_devkit/build_angular/src/karma/code-coverage_spec.ts index 381d8c5b2f94..8afedef13ee7 100644 --- a/packages/angular_devkit/build_angular/src/karma/code-coverage_spec.ts +++ b/packages/angular_devkit/build_angular/src/karma/code-coverage_spec.ts @@ -184,4 +184,16 @@ describe('Karma Builder code coverage', () => { expect(success).toBe(true); await run.stop(); }, 120000); + + it('is able to process coverage plugins provided as string karma-*', async () => { + host.replaceInFile('karma.conf.js', /plugins: \[.+?\]/s, `plugins: [ + 'karma-*', + require('@angular-devkit/build-angular/plugins/karma'), + ]`); + const run = await architect.scheduleTarget(karmaTargetSpec, { codeCoverage: true }); + + const {success} = await run.result; + expect(success).toBe(true); + await run.stop(); + }, 120000); }); diff --git a/packages/angular_devkit/build_angular/src/webpack/plugins/karma/karma.ts b/packages/angular_devkit/build_angular/src/webpack/plugins/karma/karma.ts index 1738280cb514..bc0041dc6daf 100644 --- a/packages/angular_devkit/build_angular/src/webpack/plugins/karma/karma.ts +++ b/packages/angular_devkit/build_angular/src/webpack/plugins/karma/karma.ts @@ -336,7 +336,17 @@ function fallbackMiddleware() { function isPlugin(moduleId: string, pluginName: string) { return (plugin: string|{}): boolean => { if (typeof plugin === 'string') { - return plugin === moduleId; + if (!plugin.includes('*')) { + return plugin === moduleId; + } + const regexp = new RegExp(`^${plugin.replace('*', '.*')}`); + if (regexp.test(moduleId)) { + try { + require.resolve(moduleId); + return true; + } catch {} + } + return false; } return pluginName in plugin; }