wallabyjs / public

Repository for Wallaby.js questions and issues
http://wallabyjs.com
760 stars 45 forks source link

JavaScript heap out of memory  #2711

Closed adamalfredsson closed 3 years ago

adamalfredsson commented 3 years ago

Issue description or question

I'm running wallaby in a fairly large project and after completes finish running the process runs out of memory and exits:

[Info]  Finished executing 6457 affected test(s) in 38.28 second(s)
[Error] <--- Last few GCs ---> 
[Error] [7778:0x150008000]   189146 ms: Scavenge 1991.4 (2058.3) -> 1989.7 (2062.6) MB, 5.6 / 0.0 ms  (average mu = 0.797, current mu = 0.384) allocation failure  
[Error] [7778:0x150008000]   189166 ms: Scavenge 1995.3 (2062.6) -> 1993.1 (2080.6) MB, 5.8 / 0.0 ms  (average mu = 0.797, current mu = 0.384) allocation failure  
[Error] [7778:0x150008000]   189718 ms: Mark-sweep 2006.0 (2080.6) -> 1995.7 (2088.1) MB, 530.2 / 0.0 ms  (average mu = 0.666, current mu = 0.175) allocation failure scavenge might not succeed 
[Error] <--- JS stacktrace ---> 
[Error] <--- Last few GCs ---> 
[Error] [7778:0x150008000]   189146 ms: Scavenge 1991.4 (2058.3) -> 1989.7 (2062.6) MB, 5.6 / 0.0 ms  (average mu = 0.797, current mu = 0.384) allocation failure  
[Error] [7778:0x150008000]   189166 ms: Scavenge 1995.3 (2062.6) -> 1993.1 (2080.6) MB, 5.8 / 0.0 ms  (average mu = 0.797, current mu = 0.384) allocation failure  
[Error] [7778:0x150008000]   189718 ms: Mark-sweep 2006.0 (2080.6) -> 1995.7 (2088.1) MB, 530.2 / 0.0 ms  (average mu = 0.666, current mu = 0.175) allocation failure scavenge might not succeed 
[Error] <--- JS stacktrace ---> 
[Error] FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory 
[Error] FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory 

I have tried running command suggested in this issue and this issue:

launchctl setenv NODE_OPTIONS --max_old_space_size=4096

And setting the universal variable for fish shell (probably irrelevant):

set -Ux NODE_OPTIONS --max-old-space-size=4096

And launching vscode from terminal with NODE_OPTIONS set:

export NODE_OPTIONS="--max-old-space-size=4096" code .

Unfortunately neither attempt solved this issue. Any ideas?

Wallaby diagnostics report

I'm able to retrieve the diagnostics report when running exclusive test run:

{
  editorVersion: '1.56.2',
  pluginVersion: '1.0.292',
  editorType: 'VSCode',
  osVersion: 'darwin 20.4.0',
  nodeVersion: 'v15.5.0',
  coreVersion: '1.0.1076',
  checksum: 'MWI5Y2JmOTM5NTRiNmNhOTg1NTE1N2E5ZTQzZjY3YmUsMTYzNTk4NDAwMDAwMCww',
  config: {
    diagnostics: {
      angular: {
        workspace: {
          '$schema': './node_modules/@angular/cli/lib/config/schema.json',
          version: 1,
          newProjectRoot: 'projects',
          projects: {
            core: {
              projectType: 'library',
              root: 'projects/core',
              sourceRoot: 'projects/core/src',
              prefix: 'py',
              architect: {
                build: {
                  builder: '@angular-devkit/build-ng-packagr:build',
                  options: { tsConfig: 'projects/core/tsconfig.lib.json', project: 'projects/core/ng-package.json' },
                  configurations: { production: { tsConfig: 'projects/core/tsconfig.lib.prod.json' } }
                },
                test: {
                  builder: '@angular-devkit/build-angular:karma',
                  options: {
                    main: 'projects/core/src/test.ts',
                    tsConfig: 'projects/core/tsconfig.spec.json',
                    karmaConfig: 'projects/core/karma.conf.js',
                    codeCoverageExclude: [ 'dist/**/*', '**/mock*' ]
                  }
                },
                lint: {
                  builder: '@angular-devkit/build-angular:tslint',
                  options: { tsConfig: [ 'projects/core/tsconfig.lib.json', 'projects/core/tsconfig.spec.json' ], exclude: [ '**/node_modules/**' ] }
                }
              }
            },
            storefrontlib: {
              projectType: 'library',
              root: 'projects/storefrontlib',
              sourceRoot: 'projects/storefrontlib/src',
              prefix: 'py',
              architect: {
                build: {
                  builder: '@angular-devkit/build-ng-packagr:build',
                  options: { tsConfig: 'projects/storefrontlib/tsconfig.lib.json', project: 'projects/storefrontlib/ng-package.json' },
                  configurations: { production: { tsConfig: 'projects/storefrontlib/tsconfig.lib.prod.json' } }
                },
                test: {
                  builder: '@angular-devkit/build-angular:karma',
                  options: {
                    main: 'projects/storefrontlib/src/test.ts',
                    tsConfig: 'projects/storefrontlib/tsconfig.spec.json',
                    karmaConfig: 'projects/storefrontlib/karma.conf.js',
                    codeCoverageExclude: [ 'dist/**/*' ],
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] }
                  }
                },
                lint: {
                  builder: '@angular-devkit/build-angular:tslint',
                  options: { tsConfig: [ 'projects/storefrontlib/tsconfig.lib.json', 'projects/storefrontlib/tsconfig.spec.json' ], exclude: [ '**/node_modules/**' ] }
                }
              }
            },
            assets: {
              projectType: 'library',
              root: 'projects/assets',
              sourceRoot: 'projects/assets/src',
              prefix: 'py',
              architect: {
                build: {
                  builder: '@angular-devkit/build-ng-packagr:build',
                  options: { tsConfig: 'projects/assets/tsconfig.lib.json', project: 'projects/assets/ng-package.json' },
                  configurations: { production: { tsConfig: 'projects/assets/tsconfig.lib.prod.json' } }
                },
                test: {
                  builder: '@angular-devkit/build-angular:karma',
                  options: { main: 'projects/assets/src/test.ts', tsConfig: 'projects/assets/tsconfig.spec.json', karmaConfig: 'projects/assets/karma.conf.js' }
                },
                lint: {
                  builder: '@angular-devkit/build-angular:tslint',
                  options: { tsConfig: [ 'projects/assets/tsconfig.lib.json', 'projects/assets/tsconfig.spec.json' ], exclude: [ '**/node_modules/**' ] }
                }
              }
            },
            redacted1: {
              projectType: 'application',
              root: 'projects/redacted1',
              sourceRoot: 'projects/redacted1/src',
              prefix: 'py',
              schematics: {},
              architect: {
                build: {
                  builder: '@angular-devkit/build-angular:browser',
                  options: {
                    outputPath: 'dist/redacted1',
                    index: 'projects/redacted1/src/index.html',
                    main: 'projects/redacted1/src/main.ts',
                    polyfills: 'projects/redacted1/src/polyfills.ts',
                    tsConfig: 'projects/redacted1/tsconfig.app.json',
                    assets: [
                      'projects/redacted1/src/assets',
                      'projects/redacted1/src/browserconfig.xml',
                      'projects/redacted1/src/manifest.webmanifest',
                      { glob: 'webApplicationInjector.js', input: 'projects/storefrontlib/src', output: '/' },
                      { glob: '**/*', input: './node_modules/@ant-design/icons-angular/src/inline-svg/', output: '/assets/' }
                    ],
                    styles: [ 'projects/redacted1/src/styles.scss' ],
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] },
                    ngswConfigPath: 'projects/storefrontlib/src/cms-structure/pwa/ngsw-config.json',
                    scripts: [],
                    sourceMap: { scripts: true, styles: true, vendor: true }
                  },
                  configurations: {
                    production: {
                      fileReplacements: [ { replace: 'projects/redacted1/src/environments/environment.ts', with: 'projects/redacted1/src/environments/environment.prod.ts' } ],
                      budgets: [ { type: 'anyComponentStyle', maximumWarning: '6kb' } ],
                      optimization: true,
                      outputHashing: 'all',
                      sourceMap: false,
                      extractCss: true,
                      namedChunks: false,
                      aot: true,
                      extractLicenses: true,
                      vendorChunk: false,
                      buildOptimizer: true,
                      serviceWorker: true,
                      tsConfig: 'projects/redacted1/tsconfig.app.prod.json'
                    },
                    es5: { tsConfig: 'projects/redacted1/tsconfig-es5.app.json' }
                  }
                },
                serve: {
                  builder: '@angular-devkit/build-angular:dev-server',
                  options: { browserTarget: 'redacted1:build' },
                  configurations: { production: { browserTarget: 'redacted1:build:production' }, es5: { browserTarget: 'redacted1:build:es5' } }
                },
                'extract-i18n': { builder: '@angular-devkit/build-angular:extract-i18n', options: { browserTarget: 'redacted1:build' } },
                test: {
                  builder: '@angular-devkit/build-angular:karma',
                  options: {
                    main: 'projects/redacted1/src/test.ts',
                    polyfills: 'projects/redacted1/src/polyfills.ts',
                    tsConfig: 'projects/redacted1/tsconfig.spec.json',
                    karmaConfig: 'projects/redacted1/karma.conf.js',
                    assets: [
                      'projects/redacted1/src/assets',
                      'projects/redacted1/src/manifest.webmanifest',
                      'projects/redacted1/src/browserconfig.xml',
                      { glob: 'webApplicationInjector.js', input: 'projects/storefrontlib/src', output: '/' },
                      { glob: '**/*', input: './node_modules/@ant-design/icons-angular/src/inline-svg/', output: '/assets/' }
                    ],
                    styles: [ 'node_modules/animate.css/animate.min.css', 'projects/redacted1/src/styles.scss' ],
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] },
                    scripts: [],
                    codeCoverageExclude: [ 'dist/**/*' ]
                  }
                },
                lint: {
                  builder: '@angular-devkit/build-angular:tslint',
                  options: { tsConfig: [ 'projects/redacted1/tsconfig.app.json', 'projects/redacted1/tsconfig.spec.json' ], exclude: [ '**/node_modules/**' ] }
                },
                server: {
                  builder: '@angular-devkit/build-angular:server',
                  options: {
                    outputPath: 'dist/redacted1/server',
                    main: 'projects/redacted1/server.ts',
                    tsConfig: 'projects/redacted1/tsconfig.server.json',
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] }
                  },
                  configurations: {
                    production: {
                      outputHashing: 'media',
                      fileReplacements: [ { replace: 'projects/redacted1/src/environments/environment.ts', with: 'projects/redacted1/src/environments/environment.prod.ts' } ],
                      sourceMap: false,
                      optimization: true,
                      tsConfig: 'projects/redacted1/tsconfig.server.prod.json'
                    }
                  }
                },
                'serve-ssr': {
                  builder: '@nguniversal/builders:ssr-dev-server',
                  options: { browserTarget: 'redacted1:build', serverTarget: 'redacted1:server' },
                  configurations: { production: { browserTarget: 'redacted1:build:production', serverTarget: 'redacted1:server:production' } }
                },
                prerender: {
                  builder: '@nguniversal/builders:prerender',
                  options: { browserTarget: 'redacted1:build:production', serverTarget: 'redacted1:server:production', routes: [ '/' ] },
                  configurations: { production: {} }
                }
              }
            },
            redacted2: {
              projectType: 'application',
              root: 'projects/redacted2',
              sourceRoot: 'projects/redacted2/src',
              prefix: 'py',
              schematics: {},
              architect: {
                build: {
                  builder: '@angular-devkit/build-angular:browser',
                  options: {
                    outputPath: 'dist/redacted2',
                    index: 'projects/redacted2/src/index.html',
                    main: 'projects/redacted2/src/main.ts',
                    polyfills: 'projects/redacted2/src/polyfills.ts',
                    tsConfig: 'projects/redacted2/tsconfig.app.json',
                    assets: [
                      'projects/redacted2/src/assets',
                      'projects/redacted2/src/browserconfig.xml',
                      'projects/redacted2/src/manifest.webmanifest',
                      { glob: 'webApplicationInjector.js', input: 'projects/storefrontlib/src', output: '/' },
                      { glob: '**/*', input: './node_modules/@ant-design/icons-angular/src/inline-svg/', output: '/assets/' }
                    ],
                    styles: [ 'node_modules/animate.css/animate.min.css', 'projects/redacted2/src/styles.scss' ],
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] },
                    ngswConfigPath: 'projects/storefrontlib/src/cms-structure/pwa/ngsw-config.json',
                    scripts: [],
                    sourceMap: { scripts: true, styles: true, vendor: true }
                  },
                  configurations: {
                    production: {
                      fileReplacements: [ { replace: 'projects/redacted2/src/environments/environment.ts', with: 'projects/redacted2/src/environments/environment.prod.ts' } ],
                      budgets: [ { type: 'anyComponentStyle', maximumWarning: '6kb' } ],
                      optimization: true,
                      outputHashing: 'all',
                      sourceMap: false,
                      extractCss: true,
                      namedChunks: false,
                      aot: true,
                      extractLicenses: true,
                      vendorChunk: false,
                      buildOptimizer: true,
                      serviceWorker: true,
                      tsConfig: 'projects/redacted2/tsconfig.app.prod.json'
                    },
                    es5: { tsConfig: 'projects/redacted2/tsconfig-es5.app.json' }
                  }
                },
                serve: {
                  builder: '@angular-devkit/build-angular:dev-server',
                  options: { browserTarget: 'redacted2:build' },
                  configurations: { production: { browserTarget: 'redacted2:build:production' }, es5: { browserTarget: 'redacted2:build:es5' } }
                },
                'extract-i18n': { builder: '@angular-devkit/build-angular:extract-i18n', options: { browserTarget: 'redacted2:build' } },
                test: {
                  builder: '@angular-devkit/build-angular:karma',
                  options: {
                    main: 'projects/redacted2/src/test.ts',
                    polyfills: 'projects/redacted2/src/polyfills.ts',
                    tsConfig: 'projects/redacted2/tsconfig.spec.json',
                    karmaConfig: 'projects/redacted2/karma.conf.js',
                    assets: [
                      'projects/redacted2/src/assets',
                      'projects/redacted2/src/manifest.webmanifest',
                      'projects/redacted2/src/browserconfig.xml',
                      { glob: 'webApplicationInjector.js', input: 'projects/storefrontlib/src', output: '/' },
                      { glob: '**/*', input: './node_modules/@ant-design/icons-angular/src/inline-svg/', output: '/assets/' }
                    ],
                    styles: [ 'projects/redacted2/src/styles.scss' ],
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] },
                    scripts: [],
                    codeCoverageExclude: [ 'dist/**/*' ]
                  }
                },
                lint: {
                  builder: '@angular-devkit/build-angular:tslint',
                  options: { tsConfig: [ 'projects/redacted2/tsconfig.app.json', 'projects/redacted2/tsconfig.spec.json' ], exclude: [ '**/node_modules/**' ] }
                },
                server: {
                  builder: '@angular-devkit/build-angular:server',
                  options: {
                    outputPath: 'dist/redacted2/server',
                    main: 'projects/redacted2/server.ts',
                    tsConfig: 'projects/redacted2/tsconfig.server.json',
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] }
                  },
                  configurations: {
                    production: {
                      outputHashing: 'media',
                      fileReplacements: [ { replace: 'projects/redacted2/src/environments/environment.ts', with: 'projects/redacted2/src/environments/environment.prod.ts' } ],
                      sourceMap: false,
                      optimization: true,
                      tsConfig: 'projects/redacted2/tsconfig.server.prod.json'
                    }
                  }
                },
                'serve-ssr': {
                  builder: '@nguniversal/builders:ssr-dev-server',
                  options: { browserTarget: 'redacted2:build', serverTarget: 'redacted2:server' },
                  configurations: { production: { browserTarget: 'redacted2:build:production', serverTarget: 'redacted2:server:production' } }
                },
                prerender: {
                  builder: '@nguniversal/builders:prerender',
                  options: { browserTarget: 'redacted2:build:production', serverTarget: 'redacted2:server:production', routes: [ '/' ] },
                  configurations: { production: {} }
                }
              }
            },
            redacted3: {
              projectType: 'application',
              root: 'projects/redacted3',
              sourceRoot: 'projects/redacted3/src',
              prefix: 'py',
              schematics: {},
              architect: {
                build: {
                  builder: '@angular-devkit/build-angular:browser',
                  options: {
                    outputPath: 'dist/redacted3',
                    index: 'projects/redacted3/src/index.html',
                    main: 'projects/redacted3/src/main.ts',
                    polyfills: 'projects/redacted3/src/polyfills.ts',
                    tsConfig: 'projects/redacted3/tsconfig.app.json',
                    assets: [
                      'projects/redacted3/src/assets',
                      'projects/redacted3/src/browserconfig.xml',
                      'projects/redacted3/src/manifest.webmanifest',
                      { glob: 'webApplicationInjector.js', input: 'projects/storefrontlib/src', output: '/' },
                      { glob: '**/*', input: './node_modules/@ant-design/icons-angular/src/inline-svg/', output: '/assets/' }
                    ],
                    styles: [ 'node_modules/animate.css/animate.min.css', 'projects/redacted3/src/styles.scss' ],
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] },
                    ngswConfigPath: 'projects/storefrontlib/src/cms-structure/pwa/ngsw-config.json',
                    scripts: [],
                    sourceMap: { scripts: true, styles: true, vendor: true }
                  },
                  configurations: {
                    production: {
                      fileReplacements: [ { replace: 'projects/redacted3/src/environments/environment.ts', with: 'projects/redacted3/src/environments/environment.prod.ts' } ],
                      budgets: [ { type: 'anyComponentStyle', maximumWarning: '6kb' } ],
                      optimization: true,
                      outputHashing: 'all',
                      sourceMap: false,
                      extractCss: true,
                      namedChunks: false,
                      aot: true,
                      extractLicenses: true,
                      vendorChunk: false,
                      buildOptimizer: true,
                      serviceWorker: true,
                      tsConfig: 'projects/redacted3/tsconfig.app.prod.json'
                    },
                    es5: { tsConfig: 'projects/redacted3/tsconfig-es5.app.json' }
                  }
                },
                serve: {
                  builder: '@angular-devkit/build-angular:dev-server',
                  options: { browserTarget: 'redacted3:build' },
                  configurations: { production: { browserTarget: 'redacted3:build:production' }, es5: { browserTarget: 'redacted3:build:es5' } }
                },
                'extract-i18n': { builder: '@angular-devkit/build-angular:extract-i18n', options: { browserTarget: 'redacted3:build' } },
                test: {
                  builder: '@angular-devkit/build-angular:karma',
                  options: {
                    main: 'projects/redacted3/src/test.ts',
                    polyfills: 'projects/redacted3/src/polyfills.ts',
                    tsConfig: 'projects/redacted3/tsconfig.spec.json',
                    karmaConfig: 'projects/redacted3/karma.conf.js',
                    assets: [
                      'projects/redacted3/src/assets',
                      'projects/redacted3/src/manifest.webmanifest',
                      'projects/redacted3/src/browserconfig.xml',
                      { glob: 'webApplicationInjector.js', input: 'projects/storefrontlib/src', output: '/' },
                      { glob: '**/*', input: './node_modules/@ant-design/icons-angular/src/inline-svg/', output: '/assets/' }
                    ],
                    styles: [ 'projects/redacted3/src/styles.scss' ],
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] },
                    scripts: [],
                    codeCoverageExclude: [ 'dist/**/*' ]
                  }
                },
                lint: {
                  builder: '@angular-devkit/build-angular:tslint',
                  options: { tsConfig: [ 'projects/redacted3/tsconfig.app.json', 'projects/redacted3/tsconfig.spec.json' ], exclude: [ '**/node_modules/**' ] }
                },
                server: {
                  builder: '@angular-devkit/build-angular:server',
                  options: {
                    outputPath: 'dist/redacted3/server',
                    main: 'projects/redacted3/server.ts',
                    tsConfig: 'projects/redacted3/tsconfig.server.json',
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] }
                  },
                  configurations: {
                    production: {
                      outputHashing: 'media',
                      fileReplacements: [ { replace: 'projects/redacted3/src/environments/environment.ts', with: 'projects/redacted3/src/environments/environment.prod.ts' } ],
                      sourceMap: false,
                      optimization: true,
                      tsConfig: 'projects/redacted3/tsconfig.server.prod.json'
                    }
                  }
                },
                'serve-ssr': {
                  builder: '@nguniversal/builders:ssr-dev-server',
                  options: { browserTarget: 'redacted3:build', serverTarget: 'redacted3:server' },
                  configurations: { production: { browserTarget: 'redacted3:build:production', serverTarget: 'redacted3:server:production' } }
                },
                prerender: {
                  builder: '@nguniversal/builders:prerender',
                  options: { browserTarget: 'redacted3:build:production', serverTarget: 'redacted3:server:production', routes: [ '/' ] },
                  configurations: { production: {} }
                }
              }
            },
            redacted4: {
              projectType: 'application',
              root: 'projects/redacted4',
              sourceRoot: 'projects/redacted4/src',
              prefix: 'py',
              schematics: {},
              architect: {
                build: {
                  builder: '@angular-devkit/build-angular:browser',
                  options: {
                    outputPath: 'dist/redacted4',
                    index: 'projects/redacted4/src/index.html',
                    main: 'projects/redacted4/src/main.ts',
                    polyfills: 'projects/redacted4/src/polyfills.ts',
                    tsConfig: 'projects/redacted4/tsconfig.app.json',
                    assets: [
                      'projects/redacted4/src/assets',
                      'projects/redacted4/src/browserconfig.xml',
                      'projects/redacted4/src/manifest.webmanifest',
                      { glob: 'webApplicationInjector.js', input: 'projects/storefrontlib/src', output: '/' },
                      { glob: '**/*', input: './node_modules/@ant-design/icons-angular/src/inline-svg/', output: '/assets/' }
                    ],
                    styles: [ 'node_modules/animate.css/animate.min.css', 'projects/redacted4/src/styles.scss' ],
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] },
                    ngswConfigPath: 'projects/storefrontlib/src/cms-structure/pwa/ngsw-config.json',
                    scripts: [],
                    sourceMap: { scripts: true, styles: true, vendor: true }
                  },
                  configurations: {
                    production: {
                      fileReplacements: [ { replace: 'projects/redacted4/src/environments/environment.ts', with: 'projects/redacted4/src/environments/environment.prod.ts' } ],
                      budgets: [ { type: 'anyComponentStyle', maximumWarning: '6kb' } ],
                      optimization: true,
                      outputHashing: 'all',
                      sourceMap: false,
                      extractCss: true,
                      namedChunks: false,
                      aot: true,
                      extractLicenses: true,
                      vendorChunk: false,
                      buildOptimizer: true,
                      serviceWorker: true,
                      tsConfig: 'projects/redacted4/tsconfig.app.prod.json'
                    },
                    es5: { tsConfig: 'projects/redacted4/tsconfig-es5.app.json' }
                  }
                },
                serve: {
                  builder: '@angular-devkit/build-angular:dev-server',
                  options: { browserTarget: 'redacted4:build' },
                  configurations: { production: { browserTarget: 'redacted4:build:production' }, es5: { browserTarget: 'redacted4:build:es5' } }
                },
                'extract-i18n': { builder: '@angular-devkit/build-angular:extract-i18n', options: { browserTarget: 'redacted4:build' } },
                test: {
                  builder: '@angular-devkit/build-angular:karma',
                  options: {
                    main: 'projects/redacted4/src/test.ts',
                    polyfills: 'projects/redacted4/src/polyfills.ts',
                    tsConfig: 'projects/redacted4/tsconfig.spec.json',
                    karmaConfig: 'projects/redacted4/karma.conf.js',
                    assets: [
                      'projects/redacted4/src/assets',
                      'projects/redacted4/src/manifest.webmanifest',
                      'projects/redacted4/src/browserconfig.xml',
                      { glob: 'webApplicationInjector.js', input: 'projects/storefrontlib/src', output: '/' },
                      { glob: '**/*', input: './node_modules/@ant-design/icons-angular/src/inline-svg/', output: '/assets/' }
                    ],
                    styles: [ 'projects/redacted4/src/styles.scss' ],
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] },
                    scripts: [],
                    codeCoverageExclude: [ 'dist/**/*' ]
                  }
                },
                lint: {
                  builder: '@angular-devkit/build-angular:tslint',
                  options: { tsConfig: [ 'projects/redacted4/tsconfig.app.json', 'projects/redacted4/tsconfig.spec.json' ], exclude: [ '**/node_modules/**' ] }
                },
                server: {
                  builder: '@angular-devkit/build-angular:server',
                  options: {
                    outputPath: 'dist/redacted4/server',
                    main: 'projects/redacted4/server.ts',
                    tsConfig: 'projects/redacted4/tsconfig.server.json',
                    stylePreprocessorOptions: { includePaths: [ './projects/storefrontstyles/scss' ] }
                  },
                  configurations: {
                    production: {
                      outputHashing: 'media',
                      fileReplacements: [ { replace: 'projects/redacted4/src/environments/environment.ts', with: 'projects/redacted4/src/environments/environment.prod.ts' } ],
                      sourceMap: false,
                      optimization: true,
                      tsConfig: 'projects/redacted4/tsconfig.server.prod.json'
                    }
                  }
                },
                'serve-ssr': {
                  builder: '@nguniversal/builders:ssr-dev-server',
                  options: { browserTarget: 'redacted4:build', serverTarget: 'redacted4:server' },
                  configurations: { production: { browserTarget: 'redacted4:build:production', serverTarget: 'redacted4:server:production' } }
                },
                prerender: {
                  builder: '@nguniversal/builders:prerender',
                  options: { browserTarget: 'redacted4:build:production', serverTarget: 'redacted4:server:production', routes: [ '/' ] },
                  configurations: { production: {} }
                }
              }
            }
          },
          defaultProject: 'core',
          cli: { analytics: false }
        },
        polyfill: {
          path: '<homeDir>/Projects/Redacted/kasbah/wallaby-polyfills.js',
          code: "require('<homeDir>/Projects/Redacted/kasbah/node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js');\n" +
            "require('<homeDir>/Projects/Redacted/kasbah/projects/redacted1/src/polyfills.ts');"
        },
        main: [
          {
            path: '<homeDir>/Projects/Redacted/kasbah/projects/core/src/test.ts',
            code: '// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n' +
              '// tslint:disable:ordered-imports\n' +
              "import 'zone.js/dist/zone';\n" +
              "import 'zone.js/dist/zone-testing';\n" +
              '\n' +
              "import { getTestBed } from '@angular/core/testing';\n" +
              "import '@angular/localize/init';\n" +
              "import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';\n" +
              'declare const require: any;\n' +
              '\n' +
              '// First, initialize the Angular testing environment.\n' +
              'getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());\n' +
              '// Then we find all the tests.\n' +
              '\n' +
              '// And load the modules.\n' +
              '\n'
          },
          {
            path: '<homeDir>/Projects/Redacted/kasbah/projects/storefrontlib/src/test.ts',
            code: '// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n' +
              '// tslint:disable:ordered-imports\n' +
              '\n' +
              '\n' +
              '\n' +
              '\n' +
              "import '@angular/localize/init';\n" +
              '\n' +
              '\n' +
              '\n' +
              '\n' +
              '// First, initialize the Angular testing environment.\n' +
              '\n' +
              '// Then we find all the tests.\n' +
              '\n' +
              '// And load the modules.\n' +
              '\n'
          },
          {
            path: '<homeDir>/Projects/Redacted/kasbah/projects/assets/src/test.ts',
            code: '// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n' +
              '// tslint:disable:ordered-imports\n' +
              '\n' +
              '\n' +
              '\n' +
              '\n' +
              "import '@angular/localize/init';\n" +
              '\n' +
              '\n' +
              '\n' +
              '\n' +
              '// First, initialize the Angular testing environment.\n' +
              '\n' +
              '// Then we find all the tests.\n' +
              '\n' +
              '// And load the modules.\n' +
              '\n'
          },
          {
            path: '<homeDir>/Projects/Redacted/kasbah/projects/redacted1/src/test.ts',
            code: '// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n' +
              '// tslint:disable:ordered-imports\n' +
              '\n' +
              '\n' +
              '\n' +
              "import '@angular/localize/init';\n" +
              '\n' +
              '\n' +
              '\n' +
              '\n' +
              '// First, initialize the Angular testing environment.\n' +
              '\n' +
              '// Then we find all the tests.\n' +
              '\n' +
              '// And load the modules.\n' +
              '\n'
          },
          {
            path: '<homeDir>/Projects/Redacted/kasbah/projects/redacted2/src/test.ts',
            code: '// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n' +
              '// tslint:disable:ordered-imports\n' +
              '\n' +
              '\n' +
              '\n' +
              "import '@angular/localize/init';\n" +
              '\n' +
              '\n' +
              '\n' +
              '\n' +
              '// First, initialize the Angular testing environment.\n' +
              '\n' +
              '// Then we find all the tests.\n' +
              '\n' +
              '// And load the modules.\n' +
              '\n'
          },
          {
            path: '<homeDir>/Projects/Redacted/kasbah/projects/redacted3/src/test.ts',
            code: '// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n' +
              '// tslint:disable:ordered-imports\n' +
              '\n' +
              '\n' +
              '\n' +
              "import '@angular/localize/init';\n" +
              '\n' +
              '\n' +
              '\n' +
              '\n' +
              '// First, initialize the Angular testing environment.\n' +
              '\n' +
              '// Then we find all the tests.\n' +
              '\n' +
              '// And load the modules.\n' +
              '\n'
          },
          {
            path: '<homeDir>/Projects/Redacted/kasbah/projects/redacted4/src/test.ts',
            code: '// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n' +
              '// tslint:disable:ordered-imports\n' +
              '\n' +
              '\n' +
              '\n' +
              "import '@angular/localize/init';\n" +
              '\n' +
              '\n' +
              '\n' +
              '\n' +
              '// First, initialize the Angular testing environment.\n' +
              '\n' +
              '// Then we find all the tests.\n' +
              '\n' +
              '// And load the modules.\n' +
              '\n'
          }
        ]
      }
    },
    testFramework: { version: 'jasmine@3.6.0', configurator: 'jasmine@2.1.3', reporter: 'jasmine@2.1.3', starter: 'jasmine@2.1.3', autoDetected: true },
    env: { kind: 'chrome', type: 'browser', params: {}, viewportSize: { width: 800, height: 600 }, options: { width: 800, height: 600 }, bundle: true },
    files: [
      { pattern: 'projects/core/src/test.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/core/src/test.base.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/core/src/test.wallaby.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/core/src/**/*.spec.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/core/src/**/*.+(ts|js)', load: false, ignore: false, trigger: true, order: 1 },
      { pattern: 'projects/core/src/**/*.+(css|less|scss|sass|styl|html|json|svg)', instrument: false, load: false, ignore: false, trigger: true, order: 2 },
      { pattern: 'projects/storefrontlib/src/test.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/storefrontlib/src/test.base.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/storefrontlib/src/test.wallaby.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/storefrontlib/src/**/*.spec.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/storefrontlib/src/**/*.+(ts|js)', load: false, ignore: false, trigger: true, order: 3 },
      { pattern: 'projects/storefrontlib/src/**/*.+(css|less|scss|sass|styl|html|json|svg)', instrument: false, load: false, ignore: false, trigger: true, order: 4 },
      { pattern: 'projects/assets/src/test.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/assets/src/test.base.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/assets/src/test.wallaby.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/assets/src/**/*.spec.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/assets/src/**/*.+(ts|js)', load: false, ignore: false, trigger: true, order: 5 },
      { pattern: 'projects/assets/src/**/*.+(css|less|scss|sass|styl|html|json|svg)', instrument: false, load: false, ignore: false, trigger: true, order: 6 },
      { pattern: 'projects/redacted1/src/polyfills.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted1/src/test.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted1/src/main.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted1/src/index.html', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted1/src/test.base.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted1/src/test.wallaby.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted1/src/**/*.spec.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted1/src/**/*.+(ts|js)', load: false, ignore: false, trigger: true, order: 7 },
      { pattern: 'projects/redacted1/src/**/*.+(css|less|scss|sass|styl|html|json|svg)', instrument: false, load: false, ignore: false, trigger: true, order: 8 },
      { pattern: 'projects/redacted2/src/polyfills.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted2/src/test.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted2/src/main.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted2/src/index.html', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted2/src/test.base.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted2/src/test.wallaby.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted2/src/**/*.spec.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted2/src/**/*.+(ts|js)', load: false, ignore: false, trigger: true, order: 9 },
      { pattern: 'projects/redacted2/src/**/*.+(css|less|scss|sass|styl|html|json|svg)', instrument: false, load: false, ignore: false, trigger: true, order: 10 },
      { pattern: 'projects/redacted3/src/polyfills.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted3/src/test.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted3/src/main.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted3/src/index.html', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted3/src/test.base.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted3/src/test.wallaby.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted3/src/**/*.spec.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted3/src/**/*.+(ts|js)', load: false, ignore: false, trigger: true, order: 11 },
      { pattern: 'projects/redacted3/src/**/*.+(css|less|scss|sass|styl|html|json|svg)', instrument: false, load: false, ignore: false, trigger: true, order: 12 },
      { pattern: 'projects/redacted4/src/polyfills.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted4/src/test.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted4/src/main.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted4/src/index.html', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted4/src/test.base.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted4/src/test.wallaby.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted4/src/**/*.spec.ts', ignore: true, trigger: true, load: true },
      { pattern: 'projects/redacted4/src/**/*.+(ts|js)', load: false, ignore: false, trigger: true, order: 13 },
      { pattern: 'projects/redacted4/src/**/*.+(css|less|scss|sass|styl|html|json|svg)', instrument: false, load: false, ignore: false, trigger: true, order: 14 }
    ],
    tests: [
      { pattern: 'projects/core/src/**/*.spec.ts', load: false, ignore: false, trigger: true, test: true, order: 15 },
      { pattern: 'projects/storefrontlib/src/**/*.spec.ts', load: false, ignore: false, trigger: true, test: true, order: 16 },
      { pattern: 'projects/assets/src/**/*.spec.ts', load: false, ignore: false, trigger: true, test: true, order: 17 },
      { pattern: 'projects/redacted1/src/**/*.spec.ts', load: false, ignore: false, trigger: true, test: true, order: 18 },
      { pattern: 'projects/redacted2/src/**/*.spec.ts', load: false, ignore: false, trigger: true, test: true, order: 19 },
      { pattern: 'projects/redacted3/src/**/*.spec.ts', load: false, ignore: false, trigger: true, test: true, order: 20 },
      { pattern: 'projects/redacted4/src/**/*.spec.ts', load: false, ignore: false, trigger: true, test: true, order: 21 }
    ],
    filesWithNoCoverageCalculated: [],
    runAllTestsInAffectedTestFile: false,
    updateNoMoreThanOneSnapshotPerTestFileRun: false,
    addModifiedTestFileToExclusiveTestRun: true,
    compilers: {},
    preprocessors: {},
    maxConsoleMessagesPerTest: 100,
    autoConsoleLog: true,
    delays: { run: 0, edit: 100, update: 0 },
    workers: { initial: 0, regular: 0, recycle: false },
    teardown: undefined,
    hints: {
      ignoreCoverage: '__REGEXP /ignore coverage|istanbul ignore/',
      ignoreCoverageForFile: '__REGEXP /ignore file coverage/',
      commentAutoLog: '?',
      testFileSelection: { include: '__REGEXP /file\\.only/', exclude: '__REGEXP /file\\.skip/' }
    },
    automaticTestFileSelection: true,
    runSelectedTestsOnly: true,
    mapConsoleMessagesStackTrace: false,
    extensions: {},
    reportUnhandledPromises: false,
    throwOnBeforeUnload: true,
    slowTestThreshold: 75,
    lowCoverageThreshold: 80,
    loose: true,
    testLocations: [ 'projects/storefrontlib/src/cms-components/cart/containers/cart-drawer/cart-drawer.component.spec.ts' ],
    configCode: 'auto.detect#-1629756279'
  },
  packageJSON: {
    dependencies: {
      '@angular/animations': '^10.2.3',
      '@angular/common': '^10.2.3',
      '@angular/compiler': '^10.2.3',
      '@angular/core': '^10.2.3',
      '@angular/forms': '^10.2.3',
      '@angular/localize': '^10.2.3',
      '@angular/platform-browser': '^10.2.3',
      '@angular/platform-browser-dynamic': '^10.2.3',
      '@angular/platform-server': '^10.2.3',
      '@angular/router': '^10.2.3',
      '@angular/service-worker': '^10.2.3',
      '@ant-design/icons-angular': '^10.2.0',
      '@egjs/hammerjs': '^2.0.17',
      '@ng-bootstrap/ng-bootstrap': '^8.0.0',
      '@ng-select/ng-select': '^5.0.9',
      '@ngrx/effects': '^10.0.1',
      '@ngrx/router-store': '^10.0.1',
      '@ngrx/store': '^10.0.1',
      '@nguniversal/express-engine': '^10.1.0',
      'angular-oauth2-oidc': '^10.0.3',
      'animate.css': '^4.1.0',
      bootstrap: '^4.5.3',
      'chart.js': '^3.0.2',
      'classlist.js': '^1.1.20150312',
      'date-fns': '^2.16.1',
      express: '^4.17.1',
      'http-proxy': '^1.18.1',
      i18next: '^19.8.4',
      'i18next-xhr-backend': '^3.2.2',
      'ng-recaptcha': '^6.0.2',
      'ng-zorro-antd': '^10.1.2',
      'ngx-infinite-scroll': '^10.0.0',
      'object-fit-images': '^3.2.4',
      punycode: '^2.1.1',
      'resize-observer-polyfill': '^1.5.1',
      rxjs: '^6.6.3',
      tslib: '^2.0.3',
      vlq: '^1.0.1',
      'zone.js': '~0.10.3'
    },
    devDependencies: {
      '@angular-devkit/build-angular': '~0.1002.0',
      '@angular-devkit/build-ng-packagr': '~0.1002.0',
      '@angular/cli': '~10.2.0',
      '@angular/compiler-cli': '~10.2.3',
      '@angular/language-service': '~10.2.3',
      '@babel/core': '^7.12.7',
      '@ngrx/schematics': '^10.0.1',
      '@ngrx/store-devtools': '^10.0.1',
      '@nguniversal/builders': '^10.1.0',
      '@storybook/addon-a11y': '^6.1.2',
      '@storybook/addon-actions': '^6.1.2',
      '@storybook/addon-controls': '^6.1.2',
      '@storybook/addon-essentials': '^6.1.2',
      '@storybook/addon-knobs': '^6.1.2',
      '@storybook/addon-links': '^6.1.2',
      '@storybook/angular': '^6.1.2',
      '@types/express': '^4.17.4',
      '@types/fs-extra': '^9.0.4',
      '@types/hammerjs': '^2.0.36',
      '@types/jasmine': '~3.6.2',
      '@types/jasminewd2': '^2.0.8',
      '@types/node': '^12.19.6',
      '@types/punycode': '^2.1.0',
      'babel-loader': '^8.2.1',
      codelyzer: '^6.0.1',
      'cross-env': '^7.0.2',
      husky: '>=4',
      'i18n-lint': '^1.1.0',
      'jasmine-core': '^3.6.0',
      'jasmine-marbles': '^0.6.0',
      'jasmine-spec-reporter': '^6.0.0',
      karma: '^5.2.3',
      'karma-chrome-launcher': '^3.1.0',
      'karma-cli': '^2.0.0',
      'karma-coverage': '^2.0.2',
      'karma-coverage-istanbul-reporter': '^3.0.3',
      'karma-jasmine': '^4.0.1',
      'karma-jasmine-html-reporter': '^1.5.4',
      'karma-junit-reporter': '^2.0.1',
      'karma-spec-reporter': '^0.0.32',
      'lint-staged': '>=10',
      'ng-packagr': '^10.1.2',
      'node-fetch': '^2.6.1',
      plop: '^2.7.4',
      prettier: '^2.2.0',
      'react-is': '^16.13.1',
      'rxjs-tslint-rules': '^4.34.7',
      'sonar-scanner': '^3.1.0',
      sw2dts: '^2.6.3',
      'ts-loader': '^8.0.11',
      'ts-node': '^8.10.2',
      tslint: '^6.1.0',
      'tslint-config-prettier': '^1.18.0',
      typescript: '~4.0.5',
      'webpack-cli': '3.3.12'
    }
  },
  fs: { numberOfFiles: 3715 },
  debug: [
    '2021-05-24T08:02:56.492Z angular/cli config Detected Angular CLI.\n',
    '2021-05-24T08:02:57.928Z angular/cli karma workspace config Using virtual <homeDir>/Projects/Redacted/kasbah/projects/core/src/test.ts.\n',
    '2021-05-24T08:02:57.928Z angular/cli karma workspace config Using virtual <homeDir>/Projects/Redacted/kasbah/projects/storefrontlib/src/test.ts.\n',
    '2021-05-24T08:02:57.929Z angular/cli karma workspace config Using virtual <homeDir>/Projects/Redacted/kasbah/projects/assets/src/test.ts.\n',
    '2021-05-24T08:02:57.929Z angular/cli karma workspace config Using virtual <homeDir>/Projects/Redacted/kasbah/projects/redacted1/src/test.ts.\n',
    '2021-05-24T08:02:57.930Z angular/cli karma workspace config Using virtual <homeDir>/Projects/Redacted/kasbah/projects/redacted2/src/test.ts.\n',
    '2021-05-24T08:02:57.930Z angular/cli karma workspace config Using virtual <homeDir>/Projects/Redacted/kasbah/projects/redacted3/src/test.ts.\n',
    '2021-05-24T08:02:57.930Z angular/cli karma workspace config Using virtual <homeDir>/Projects/Redacted/kasbah/projects/redacted4/src/test.ts.\n',
    '2021-05-24T08:02:57.930Z angular/cli karma workspace config Using physical <homeDir>/Projects/Redacted/kasbah/tsconfig.wallaby.spec.json.\n',
    '2021-05-24T08:02:58.439Z project Wallaby Node version: v15.5.0\n',
    '2021-05-24T08:02:58.439Z project Wallaby config: <homeDir>/Projects/Redacted/kasbah/auto.detect\n',
    '2021-05-24T08:03:01.222Z fs File system scan has finished by timeout\n',
    '2021-05-24T08:03:01.283Z project File cache: <homeDir>/.vscode/extensions/wallabyjs.wallaby-vscode-1.0.292/projects/de4b50615282f21e\n',
    '2021-05-24T08:03:01.346Z uiService Listening port 51235\n',
    '2021-05-24T08:03:01.548Z workers Parallelism for initial run: 6, for regular run: 3\n',
    '2021-05-24T08:03:01.548Z workers Starting run worker instance #0\n',
    '2021-05-24T08:03:01.549Z workers Starting run worker instance #1\n',
    '2021-05-24T08:03:01.549Z workers Starting run worker instance #2\n',
    '2021-05-24T08:03:01.549Z workers Starting run worker instance #3\n',
    '2021-05-24T08:03:01.549Z workers Starting run worker instance #4\n',
    '2021-05-24T08:03:01.549Z workers Starting run worker instance #5\n',
    '2021-05-24T08:03:01.550Z workers Web server is listening at 51028\n',
    '2021-05-24T08:03:01.554Z project Stopping process pool\n',
    '2021-05-24T08:03:01.554Z project File cache is up-to-date, starting full test run\n',
    '2021-05-24T08:03:01.555Z project Running postprocessor\n',
    '2021-05-24T08:03:01.590Z postprocessor Processing started.\n',
    '2021-05-24T08:03:01.590Z postprocessor Initializing.\n',
    '2021-05-24T08:03:01.591Z postprocessor Initializing entry.\n',
    '2021-05-24T08:03:01.591Z postprocessor Sanitizing configuration.\n',
    '2021-05-24T08:03:01.592Z postprocessor Adjusting configuration.\n',
    '2021-05-24T08:03:01.592Z postprocessor Creating compiler.\n',
    '2021-05-24T08:03:01.657Z postprocessor Customizing compiler.\n',
    '2021-05-24T08:03:01.657Z postprocessor Compilation started.\n',
    '2021-05-24T08:03:51.246Z workers Started run worker instance (immediate) #0\n',
    '2021-05-24T08:03:51.246Z workers Started run worker instance (immediate) #1\n',
    '2021-05-24T08:03:51.246Z workers Started run worker instance (immediate) #2\n',
    '2021-05-24T08:03:51.246Z workers Started run worker instance (immediate) #3\n',
    '2021-05-24T08:03:51.246Z workers Started run worker instance (immediate) #4\n',
    '2021-05-24T08:03:51.246Z workers Started run worker instance (immediate) #5\n',
    '2021-05-24T08:04:15.290Z postprocessor Compilation finished.\n',
    '2021-05-24T08:04:25.255Z postprocessor Emitting 2406 files.\n',
    '2021-05-24T08:04:25.260Z postprocessor Processing finished.\n',
    '2021-05-24T08:04:25.398Z project Postprocessor execution finished\n',
    '2021-05-24T08:04:25.398Z project Test run started; run priority: 3\n',
    '2021-05-24T08:04:25.412Z project Running all tests\n',
    '2021-05-24T08:04:25.446Z workers Starting test run, priority: 3\n',
    '2021-05-24T08:04:25.446Z chromeRunner Starting sandbox [worker #0, session #8ymgl]\n',
    '2021-05-24T08:04:25.447Z chromeRunner Preparing sandbox [worker #0, session #8ymgl]\n',
    '2021-05-24T08:04:25.450Z browserRunner Total files to load in sandbox: 5\n',
    '2021-05-24T08:04:25.453Z browserRunner Sandbox is generated [worker #0, session #8ymgl]: http://localhost:51028/wallaby_sandbox0.html\n',
    '2021-05-24T08:04:25.453Z chromeRunner Prepared sandbox [worker #0, session #8ymgl]\n',
    '2021-05-24T08:04:25.453Z workers [worker #0, session #8ymgl] Running tests in sandbox\n',
    '2021-05-24T08:04:26.619Z workers [8ymgl] Loaded 20 test(s)\n',
    '2021-05-24T08:04:26.911Z workers [8ymgl] Test executed: has no view cart button\n',
    '2021-05-24T08:04:26.967Z workers [8ymgl] Test executed: should create\n',
    '2021-05-24T08:04:26.996Z workers [8ymgl] Test executed: has a view cart button\n',
    '2021-05-24T08:04:27.031Z workers [8ymgl] Test executed: should emit true if number of entries is 0\n',
    '2021-05-24T08:04:27.061Z workers [8ymgl] Test executed: should emit false if cart has entries\n',
    '2021-05-24T08:04:27.106Z workers [8ymgl] Test executed: should filter tiny carts without entries\n',
    '2021-05-24T08:04:27.136Z workers [8ymgl] Test executed: should always emit stock tiny cart\n',
    '2021-05-24T08:04:27.169Z workers [8ymgl] Test executed: should emit stock cart first\n',
    '2021-05-24T08:04:27.211Z workers [8ymgl] Test executed: should emit number of entries in tiny-cart\n',
    '2021-05-24T08:04:27.256Z workers [8ymgl] Test executed: should emit cart subTotal (totalPrice will change after simulating cart)\n',
    '2021-05-24T08:04:27.301Z workers [8ymgl] Test executed: should call activeCartService\n',
    '2021-05-24T08:04:27.346Z workers [8ymgl] Test executed: should call activeCartService method\n',
    '2021-05-24T08:04:27.392Z workers [8ymgl] Test executed: should emit false if no tiny carts\n',
    '2021-05-24T08:04:27.424Z workers [8ymgl] Test executed: should emit true if there is more than one tiny cart\n',
    '2021-05-24T08:04:27.456Z workers [8ymgl] Test executed: should emit false if only one tiny cart with entries\n',
    '2021-05-24T08:04:27.503Z workers [8ymgl] Test executed: should call service if data provided\n',
    '2021-05-24T08:04:27.533Z workers [8ymgl] Test executed: should set active drawer to shopping list if no data\n',
    '2021-05-24T08:04:27.576Z workers [8ymgl] Test executed: should emit entries in cart\n',
    '2021-05-24T08:04:27.621Z workers [8ymgl] Test executed: should call activeCartService\n',
    '2021-05-24T08:04:27.669Z workers [8ymgl] Test executed: should open modal and assign cart type\n',
    '2021-05-24T08:04:27.787Z workers [8ymgl] Run 20 test(s), skipped 0 test(s)\n',
    '2021-05-24T08:04:27.789Z workers [8ymgl] Sandbox is responsive, closing it\n',
    '2021-05-24T08:04:27.789Z workers [8ymgl] Sandbox is not responsive, recycling worker instance\n',
    '2021-05-24T08:04:27.790Z project Test run finished\n',
    '2021-05-24T08:04:27.790Z project Processed console.log entries\n',
    '2021-05-24T08:04:27.791Z project Processed loading sequences\n',
    '2021-05-24T08:04:27.792Z project Processed executed tests\n',
    '2021-05-24T08:04:27.849Z project Processed code coverage\n',
    '2021-05-24T08:04:28.014Z project Test run result processed and sent to IDE\n'
  ]
}
ArtemGovorov commented 3 years ago

Your diagnostics report was recorded when you have been running a single test file only. Does it work with a single test, and/or a specific subproject, or throws OOM exception too as when running the tests for all of your subprojects?

Can you please try

launchctl setenv NODE_OPTIONS --max_old_space_size=8192

instead of

launchctl setenv NODE_OPTIONS --max_old_space_size=4096

Also, if it doesn't help,

adamalfredsson commented 3 years ago

Thank you for investigating!

Yes, the diagnostics report was recorded when running a single test file, as it succeeded this way. When running the complete project and process runs out of memory, no diagnostics report is available.

I'm getting the same error after running launchctl setenv NODE_OPTIONS --max_old_space_size=8192. Trying again I got a bit more detailed error, if that's to any help:

[Info]  Finished executing 6457 affected test(s) in 39.11 second(s)
[Error] <--- Last few GCs ---> 
[Error] [16886:0x158008000]   199674 ms: Scavenge 1998.2 (2066.1) -> 1996.5 (2069.8) MB, 7.8 / 0.0 ms  (average mu = 0.774, current mu = 0.385) allocation failure  
[Error] [16886:0x158008000]   199721 ms: Scavenge 2001.7 (2069.8) -> 1999.5 (2088.3) MB, 11.7 / 0.0 ms  (average mu = 0.774, current mu = 0.385) allocation failure  
[Error] [16886:0x158008000]   200385 ms: Mark-sweep 2012.7 (2088.3) -> 2002.0 (2096.1) MB, 622.8 / 0.0 ms  (average mu = 0.637, current mu = 0.235) allocation failure scavenge might not succeed 
[Error] <--- JS stacktrace ---> 
[Error] FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory 
[Error]  1: 0x104318114 node::Abort() [/opt/homebrew/bin/node] 
[Error]  2: 0x104318294 std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string<std::nullptr_t>(char const*) [/opt/homebrew/bin/node] 
[Error]  3: 0x10443f2e8 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/opt/homebrew/bin/node] 
[Error]  4: 0x10443f27c v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/opt/homebrew/bin/node] 
[Error]  5: 0x104584b14 v8::internal::Heap::CollectionBarrier::ShutdownRequested() [/opt/homebrew/bin/node] 
[Error]  6: 0x1045bb564 v8::internal::EvacuateNewSpaceVisitor::Visit(v8::internal::HeapObject, int) [/opt/homebrew/bin/node] 
[Error]  7: 0x1045abe88 void v8::internal::LiveObjectVisitor::VisitBlackObjectsNoFail<v8::internal::EvacuateNewSpaceVisitor, v8::internal::MajorNonAtomicMarkingState>(v8::internal::MemoryChunk*, v8::internal::MajorNonAtomicMarkingState*, v8::internal::EvacuateNewSpaceVisitor*, v8::internal::LiveObjectVisitor::IterationMode) [/opt/homebrew/bin/node] 
[Error]  8: 0x1045abb2c v8::internal::FullEvacuator::RawEvacuatePage(v8::internal::MemoryChunk*, long*) [/opt/homebrew/bin/node] 
[Error]  9: 0x1045ab84c v8::internal::Evacuator::EvacuatePage(v8::internal::MemoryChunk*) [/opt/homebrew/bin/node] 
[Error] 10: 0x1045be840 v8::internal::PageEvacuationTask::ProcessItems() [/opt/homebrew/bin/node] 
[Error] 11: 0x1045be7c4 v8::internal::PageEvacuationTask::RunInParallel(v8::internal::ItemParallelJob::Task::Runner) [/opt/homebrew/bin/node] 
[Error] 12: 0x104596644 v8::internal::ItemParallelJob::Task::RunInternal() [/opt/homebrew/bin/node] 
[Error] 13: 0x1045969a0 v8::internal::ItemParallelJob::Run() [/opt/homebrew/bin/node] 
[Error] 14: 0x1045ad158 void v8::internal::MarkCompactCollectorBase::CreateAndExecuteEvacuationTasks<v8::internal::FullEvacuator, v8::internal::MarkCompactCollector>(v8::internal::MarkCompactCollector*, v8::internal::ItemParallelJob*, v8::internal::MigrationObserver*, long) [/opt/homebrew/bin/node] 
[Error] 15: 0x1045acf64 v8::internal::MarkCompactCollector::EvacuatePagesInParallel() [/opt/homebrew/bin/node] 
[Error] 16: 0x1045a1938 v8::internal::MarkCompactCollector::Evacuate() [/opt/homebrew/bin/node] 
[Error] 17: 0x10459fc30 v8::internal::MarkCompactCollector::CollectGarbage() [/opt/homebrew/bin/node] 
[Error] 18: 0x104585024 v8::internal::Heap::MarkCompact() [/opt/homebrew/bin/node] 
[Error] 19: 0x104583364 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/opt/homebrew/bin/node] 
[Error] 20: 0x104581c00 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/opt/homebrew/bin/node] 
[Error] 21: 0x10458a7a0 v8::internal::Heap::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/opt/homebrew/bin/node] 
[Error] 22: 0x10458a808 v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/opt/homebrew/bin/node] 
[Error] 23: 0x1045628a4 v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawArray(int, v8::internal::AllocationType) [/opt/homebrew/bin/node] 
[Error] 24: 0x104562660 v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArrayWithFiller(v8::internal::Handle<v8::internal::Map>, int, v8::internal::Handle<v8::internal::Oddball>, v8::internal::AllocationType) [/opt/homebrew/bin/node] 
[Error] 25: 0x10470ccc4 v8::internal::Handle<v8::internal::NameDictionary> v8::internal::HashTable<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::New<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity) [/opt/homebrew/bin/node] 
[Error] 26: 0x10470d1d0 v8::internal::Handle<v8::internal::NameDictionary> v8::internal::HashTable<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::EnsureCapacity<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, int, v8::internal::AllocationType) [/opt/homebrew/bin/node] 
[Error] 27: 0x10470dc84 v8::internal::Handle<v8::internal::NameDictionary> v8::internal::Dictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::Add<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*) [/opt/homebrew/bin/node] 
[Error] 28: 0x10470dbcc v8::internal::BaseNameDictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*) [/opt/homebrew/bin/node] 
[Error] 29: 0x1047eecec v8::internal::Runtime_AddDictionaryProperty(int, unsigned long*, v8::internal::Isolate*) [/opt/homebrew/bin/node] 
[Error] 30: 0x104a61aec Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/opt/homebrew/bin/node] 
[Error] 31: 0x285b3782038c  
[Error] 32: 0x285b3778d1f0  
[Error] 33: 0x1049f1e24 Builtins_ArgumentsAdaptorTrampoline [/opt/homebrew/bin/node] 
[Error] 34: 0x285b3781c598  
[Error] 35: 0x285b37821acc  
[Error] 36: 0x285b378154e0  
[Error] 37: 0x285b3778d1f0  
[Error] 38: 0x1049f1e24 Builtins_ArgumentsAdaptorTrampoline [/opt/homebrew/bin/node] 
[Error] 39: 0x1049fa7f4 Builtins_InterpreterEntryTrampoline [/opt/homebrew/bin/node] 
[Error] 40: 0x1049fa7f4 Builtins_InterpreterEntryTrampoline [/opt/homebrew/bin/node] 
[Error] 41: 0x285b37e5b720  
[Error] 42: 0x1049f1e24 Builtins_ArgumentsAdaptorTrampoline [/opt/homebrew/bin/node] 
[Error] 43: 0x1049fa7f4 Builtins_InterpreterEntryTrampoline [/opt/homebrew/bin/node] 
[Error] 44: 0x1049f1e24 Builtins_ArgumentsAdaptorTrampoline [/opt/homebrew/bin/node] 
[Error] 45: 0x1049fa7f4 Builtins_InterpreterEntryTrampoline [/opt/homebrew/bin/node] 
[Error] 46: 0x1049fa7f4 Builtins_InterpreterEntryTrampoline [/opt/homebrew/bin/node] 
[Error] 47: 0x1049fa7f4 Builtins_InterpreterEntryTrampoline [/opt/homebrew/bin/node] 
[Error] 48: 0x1049fa7f4 Builtins_InterpreterEntryTrampoline [/opt/homebrew/bin/node] 
[Error] 49: 0x1049fa7f4 Builtins_InterpreterEntryTrampoline [/opt/homebrew/bin/node] 
[Error] 50: 0x285b389eb080  
[Error] 51: 0x1049fa7f4 Builtins_InterpreterEntryTrampoline [/opt/homebrew/bin/node] 
[Error] 52: 0x1049f80a4 Builtins_JSEntryTrampoline [/opt/homebrew/bin/node] 
[Error] 53: 0x1049f7d48 Builtins_JSEntry [/opt/homebrew/bin/node] 
[Error] 54: 0x158008000  

Also perhaps worth pointing out is that I've tried configuring wallaby for arm64 environment. I've added this to my editor settings:

"wallaby.node": "/opt/homebrew/bin/node",

But I get the same result without this configuration. Also my colleague is running on x86_64 macOS with the same issue.

Another interesting point is that I've set tsconfig target to ES5 in tsconfig.wallaby.spec.json:

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "target": "es5",
    "downlevelIteration": true,
    "types": ["jasmine", "node"]
  }
}

If I only set the target to ES2015 instead, I'm able to run all tests.

I'm also able to run roughly one third (2195/6457 tests) of all tests by configuring tests in package.json:

"wallaby": {
  "tests": [
    "projects/storefrontlib/**/*.spec.ts"
  ]
}

Also excluding these 2195 tests and running the other 4261 tests succeeds.

My impression is that despite running these commands to allocate more memory, it doesn't have effect. It still seems to fail on ~2048 Mb (my interpretation of Mark-sweep 2012.7 (2088.3) -> 2002.0 (2096.1) MB). Perhaps ES2015 is just less memory-intensive?

smcenlly commented 3 years ago

Could you also please provide the results of this?

Also, if it doesn't help,

  • can you try running the project with node v14.x?
  • run (and share the result):
    > node
    > require('v8').getHeapStatistics().heap_size_limit / (1024 * 1024)
adamalfredsson commented 3 years ago

Sorry for the delay, I had issues setting up NVM.

Could you also please provide the results of this?

Also, if it doesn't help,

  • can you try running the project with node v14.x?

Running the project with arm64 node version 14.x runs into the same exception.

  • run (and share the result):
> node
> require('v8').getHeapStatistics().heap_size_limit / (1024 * 1024)

4144

smcenlly commented 3 years ago

Hey @nomadoda - sorry it's taken us a few days to get back to you. We've created a sample project with a large amount of tests to try reproduce your problem but haven't been able to do so yet. We're also in the process of analyzing the heap to see if there's anything suspicious going on but have not identified anything yet.

In terms of where you are at - are you OK to target ES2015 instead of ES5 as a workaround? If so, I'll close the issue. We'll continue to do a bit more investigation but I feel we might be wasting our time without having your actual project.


The fact that it's working using ES2015 and not ES5 indicates to us that they issue may lie in something that Webpack is doing as Webpack is the thing that's compiling your TypeScript, not Wallaby.

Another difference worth noting when running Wallaby vs. ng test is that Wallaby is running all of your projects at the same time, in the same Webpack while ng test runs them sequentially in their own process space, isolated from one another; this may also be contributing to the problem.

Do you have a problem if you try and run a single project? Or is it only when you run all projects at the same time?

I'd also be interested in upgrading to latest version of Angular (and your various dependencies) to see if that fixes the problem.

smcenlly commented 3 years ago

We're also in the process of analyzing the heap to see if there's anything suspicious going on but have not identified anything yet.

We completed our investigation today and didn't find anything that would lead to your issue. Everything was behaving as expected.

If you're able to run on a machine with enough memory, we're keen to understand if the problem goes away if you allocate enough memory (e.g. try 16GB).

adamalfredsson commented 3 years ago

Thank you a lot for investigating. I understand it's a real difficult one to look at. I did manage to reproduce this issue with another machine, but hadn't tried allocating more memory. Targeting ES2015 works fine, however some ~70 tests are incompatible and fails on ES2015.

I have no issue running a single project, it's only when running all at one time.

I'll post an update when we upgrade angular as to whether it works.

smcenlly commented 3 years ago

I'm going to close this issue since we haven't heard back and it is old.

@nomadoda - feel free to reply when you have more details and we can re-open the issue. Alternatively, you may create a new issue if you're still having problems.