diff --git a/app/angular/src/server/__tests__/angular-cli_utils.test.ts b/app/angular/src/server/__tests__/angular-cli_utils.test.ts new file mode 100644 index 000000000000..9e0b178663cf --- /dev/null +++ b/app/angular/src/server/__tests__/angular-cli_utils.test.ts @@ -0,0 +1,47 @@ +import { Path } from '@angular-devkit/core'; + +import { getAngularCliParts } from '../angular-cli_utils'; +import { getAngularCliWebpackConfigOptions } from '../angular-cli_config'; + +// @ts-ignore +import angularJson from './angular.json'; + +// eslint-disable-next-line global-require +jest.mock('fs', () => require('../../../../../__mocks__/fs')); +jest.mock('path', () => ({ + join: (...args) => + args[args.length - 1] === 'angular.json' + ? 'angular.json' + : jest.requireActual('path').join(...args), + resolve: (..._args) => 'tsconfig.json', + parse: jest.requireActual('path').parse, + dirname: jest.requireActual('path').dirname, +})); + +const setupFiles = (files: any) => { + // eslint-disable-next-line no-underscore-dangle, global-require + require('fs').__setMockFiles(files); +}; + +describe('angular-cli_utils', () => { + describe('getAngularCliParts', () => { + it('should parse angular cli config correctly', () => { + setupFiles({ 'angular.json': JSON.stringify(angularJson) }); + let config = getAngularCliWebpackConfigOptions('/' as Path); + expect(getAngularCliParts(config)).not.toBe(null); + + config = { + ...config, + buildOptions: { + ...config.buildOptions, + }, + }; + + delete config.buildOptions.outputPath; + delete config.buildOptions.scripts; + delete config.buildOptions.styles; + + expect(getAngularCliParts(config)).not.toBe(null); + }); + }); +}); diff --git a/app/angular/src/server/angular-cli_config.ts b/app/angular/src/server/angular-cli_config.ts index d2429e33f1d5..cdf084e23177 100644 --- a/app/angular/src/server/angular-cli_config.ts +++ b/app/angular/src/server/angular-cli_config.ts @@ -91,6 +91,9 @@ export function getAngularCliWebpackConfigOptions(dirToSearch: Path) { buildOptions: { sourceMap: false, optimization: {}, + outputPath: 'storybook-static', + scripts: [], + styles: [], ...projectOptions, assets: normalizedAssets, },