@@ -187,6 +187,45 @@ export function useCIDefaults(projectName = 'test-project'): Promise<void> {
187
187
} ) ;
188
188
}
189
189
190
+ const KARMA_CONF_DEFAULT = `
191
+ module.exports = function (config) {
192
+ config.set({
193
+ basePath: '',
194
+ frameworks: ['jasmine', '@angular-devkit/build-angular'],
195
+ plugins: [
196
+ require('karma-jasmine'),
197
+ require('karma-chrome-launcher'),
198
+ require('karma-jasmine-html-reporter'),
199
+ require('karma-coverage'),
200
+ require('@angular-devkit/build-angular/plugins/karma')
201
+ ],
202
+ client: {
203
+ jasmine: {},
204
+ clearContext: false // leave Jasmine Spec Runner output visible in browser
205
+ },
206
+ jasmineHtmlReporter: {
207
+ suppressAll: true // removes the duplicated traces
208
+ },
209
+ coverageReporter: {
210
+ dir: require('path').join(__dirname, './coverage/$PROJECT_NAME$'),
211
+ subdir: '.',
212
+ reporters: [
213
+ { type: 'html' },
214
+ { type: 'text-summary' }
215
+ ]
216
+ },
217
+ reporters: ['progress', 'kjhtml'],
218
+ port: 9876,
219
+ colors: true,
220
+ logLevel: config.LOG_INFO,
221
+ autoWatch: true,
222
+ browsers: ['Chrome'],
223
+ singleRun: false,
224
+ restartOnFileChange: true
225
+ });
226
+ };
227
+ ` ;
228
+
190
229
export async function useCIChrome ( projectName : string , projectDir = '' ) : Promise < void > {
191
230
const protractorConf = path . join ( projectDir , 'protractor.conf.js' ) ;
192
231
if ( fs . existsSync ( protractorConf ) ) {
@@ -206,11 +245,38 @@ export async function useCIChrome(projectName: string, projectDir = ''): Promise
206
245
) ;
207
246
}
208
247
248
+ const karmaConf = path . join ( projectDir , 'karma.conf.js' ) ;
249
+
250
+ // Create one with default config if it doesn't exist
251
+ if ( ! fs . existsSync ( karmaConf ) ) {
252
+ await writeFile ( karmaConf , KARMA_CONF_DEFAULT . replace ( '$PROJECT_NAME$' , projectName ) ) ;
253
+ }
254
+
209
255
// Update to use the headless sandboxed chrome
256
+ await replaceInFile (
257
+ karmaConf ,
258
+ / b r o w s e r s : .* \] \s * , / ,
259
+ `
260
+ browsers: ['ChromeHeadlessNoSandbox'],
261
+ customLaunchers: {
262
+ ChromeHeadlessNoSandbox: {
263
+ base: 'ChromeHeadless',
264
+ flags: [
265
+ '--no-sandbox',
266
+ '--headless',
267
+ '--disable-gpu',
268
+ '--disable-dev-shm-usage',
269
+ ],
270
+ }
271
+ },
272
+ ` ,
273
+ ) ;
274
+
210
275
return updateJsonFile ( 'angular.json' , ( workspaceJson ) => {
211
276
const project = workspaceJson . projects [ projectName ] ;
212
277
const appTargets = project . targets || project . architect ;
213
278
appTargets . test . options . browsers = 'ChromeHeadlessNoSandbox' ;
279
+ appTargets . test . options . karmaConfig = karmaConf ;
214
280
} ) ;
215
281
}
216
282
0 commit comments