Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"logger.warn is not a function" when webpack-dev-server calls build-angular/webpack-browser-config #25312

Closed
kussmaul opened this issue Dec 29, 2022 · 5 comments · Fixed by #25500
Assignees
Labels
CT Issue related to component testing npm: @cypress/angular @cypress/angular package issues

Comments

@kussmaul
Copy link

Current behavior

If I run cypress open (full command syntax below) and select "Component Testing", I get an "Unexpected Error":

TypeError
Your configFile threw an error from: cypress.config.js

We stopped running your tests because your config file crashed.

node_modules/@angular-devkit/build-angular/src/utils/supported-browsers.js:36:16
  34 |     }
  35 |     if (unsupportedBrowsers.length) {
> 36 |         logger.warn(`One or more browsers which are configured in the project's Browserslist configuration ` +
     |                ^
  37 |             'will be ignored as ES5 output is not supported by the Angular CLI.\n' +
  38 |             `Ignored browsers: ${unsupportedBrowsers.join(', ')}`);
  39 |     }
  40 |     return Array.from(browsersFromConfigOrDefault);

Stack trace

TypeError: logger.warn is not a function
    at getSupportedBrowsers (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/supported-browsers.js:36:16)
    at normalizeBrowserSchema (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/normalize-builder-schema.js:41:74)
    at generateBrowserWebpackConfigFromContext (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/webpack-browser-config.js:118:66)
    at async getAngularCliWebpackConfig (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/helpers/angularHandler.js:144:24)
    at async angularHandler (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/helpers/angularHandler.js:179:27)
    at async getPreset (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:76:20)
    at async Function.devServer.create (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:93:61)
    at async /home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:25:24

Desired behavior

Cypress should not throw an error. :-)
If I edit .browserslistrc to exclude unsupported browsers, Cypress runs without the above error.

Test code to reproduce

cypress.config.ts

import { defineConfig } from 'cypress';
export default defineConfig({
  e2e : {
    baseUrl     : 'http://localhost:4200',
    supportFile : 'cypress/support/component.ts',
  },

  component : {
    devServer   : {
      framework : 'angular',
      bundler   : 'webpack',
    },
    specPattern : '**/*.cy.ts'
  }
});

Cypress Version

12.2.0

Node version

16.16.0

Operating System

Linux 6.0.11-200.fc36.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Dec 2 20:38:11 UTC 2022 x86_64 GNU/Linux

Debug Logs

GitHub will not let me include the full set of logs:
  `There was an error creating your issue: body is too long (maximum is 65536 characters).`
Here is a subset with the error:

  cypress:server:validation clientCerts: [] +8ms
  cypress:server:validation browsers [ { name: 'chromium', family: 'chromium', channel: 'stable', displayName: 'Chromium', version: '105.0.5195.125', path: 'chromium-browser', minSupportedVersion: 64, majorVersion: '105' }, { name: 'electron', channel: 'stable', family: 'chromium', displayName: 'Electron', version: '106.0.5249.51', path: '', majorVersion: 106 } ] +1ms
  cypress:config:project updateWithPluginValues { cfg: { devServer: { framework: 'angular', bundler: 'webpack' }, specPattern: '**/*.cy.ts', projectRoot: '/home/kussmaul/Documents/gilt', projectName: 'gilt', repoRoot: '/home/kussmaul/Documents/gilt', rawJson: { e2e: [Object], component: [Object], devServer: [Object], specPattern: '**/*.cy.ts', envFile: {}, projectRoot: '/home/kussmaul/Documents/gilt', projectName: 'gilt', repoRoot: '/home/kussmaul/Documents/gilt' }, configFile: 'cypress.config.ts', animationDistanceThreshold: 5, arch: 'x64', baseUrl: null, blockHosts: null, chromeWebSecurity: true, clientCertificates: [], defaultCommandTimeout: 4000, downloadsFolder: '/home/kussmaul/Documents/gilt/cypress/downloads', env: {}, execTimeout: 60000, experimentalFetchPolyfill: false, experimentalInteractiveRunEvents: false, experimentalRunAllSpecs: false, experimentalModifyObstructiveThirdPartyCode: false, experimentalOriginDependencies: false, experimentalSourceRewriting: false, experimentalSingleTabRunMode: false, experimentalStudio: false, experimentalWebKitSupport: false, fileServerFolder: '/home/kussmaul/Documents/gilt', fixturesFolder: '/home/kussmaul/Documents/gilt/cypress/fixtures', excludeSpecPattern: [ '**/__snapshots__/*', '**/__image_snapshots__/*' ], includeShadowDom: false, keystrokeDelay: 0, modifyObstructiveCode: true, nodeVersion: undefined, numTestsKeptInMemory: 50, platform: 'linux', pageLoadTimeout: 60000, port: null, projectId: null, redirectionLimit: 20, reporter: 'spec', reporterOptions: null, requestTimeout: 5000, resolvedNodePath: '/usr/bin/node', resolvedNodeVersion: '16.18.1', responseTimeout: 30000, retries: { runMode: 0, openMode: 0 }, screenshotOnRunFailure: true, screenshotsFolder: '/home/kussmaul/Documents/gilt/cypress/screenshots', slowTestThreshold: 250, scrollBehavior: 'top', supportFile: '/home/kussmaul/Documents/gilt/cypress/support/component.ts', supportFolder: '/home/kussmaul/Documents/gilt/cypress/support', taskTimeout: 60000, testIsolation: true, trashAssetsBeforeRuns: true, userAgent: null, video: true, videoCompression: 32, videosFolder: '/home/kussmaul/Documents/gilt/cypress/videos', videoUploadOnPasses: true, viewportHeight: 500, viewportWidth: 500, waitForAnimations: true, watchForFileChanges: true, additionalIgnorePattern: 'cypress/e2e/**/*.cy.{js,jsx,ts,tsx}', autoOpen: false, browsers: [ [Object], [Object] ], clientRoute: '/__/', cypressBinaryRoot: '/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app', devServerPublicPathRoute: '/__cypress/src', hosts: null, isInteractive: true, isTextTerminal: false, morgan: true, namespace: '__cypress', reporterRoute: '/__cypress/reporter', socketId: null, socketIoCookie: '__socket', socketIoRoute: '/__socket', version: '12.2.0', indexHtmlFile: 'cypress/support/component-index.html', cypressEnv: 'production', resolved: { animationDistanceThreshold: [Object], arch: [Object], baseUrl: [Object], blockHosts: [Object], chromeWebSecurity: [Object], clientCertificates: [Object], defaultCommandTimeout: [Object], downloadsFolder: [Object], env: {}, execTimeout: [Object], experimentalFetchPolyfill: [Object], experimentalInteractiveRunEvents: [Object], experimentalRunAllSpecs: [Object], experimentalModifyObstructiveThirdPartyCode: [Object], experimentalOriginDependencies: [Object], experimentalSourceRewriting: [Object], experimentalSingleTabRunMode: [Object], experimentalStudio: [Object], experimentalWebKitSupport: [Object], fileServerFolder: [Object], fixturesFolder: [Object], excludeSpecPattern: [Object], includeShadowDom: [Object], keystrokeDelay: [Object], modifyObstructiveCode: [Object], nodeVersion: [Object], numTestsKeptInMemory: [Object], platform: [Object], pageLoadTimeout: [Object], port: [Object], projectId: [Object], redirectionLimit: [Object], reporter: [Object], reporterOptions: [Object], requestTimeout: [Object], resolvedNodePath: [Object], resolvedNodeVersion: [Object], responseTimeout: [Object], retries: [Object], screenshotOnRunFailure: [Object], screenshotsFolder: [Object], slowTestThreshold: [Object], scrollBehavior: [Object], supportFile: [Object], supportFolder: [Object], taskTimeout: [Object], testIsolation: [Object], trashAssetsBeforeRuns: [Object], userAgent: [Object], video: [Object], videoCompression: [Object], videosFolder: [Object], videoUploadOnPasses: [Object], viewportHeight: [Object], viewportWidth: [Object], waitForAnimations: [Object], watchForFileChanges: [Object], specPattern: [Object], browsers: [Object], hosts: [Object], isInteractive: [Object] } }, modifiedConfig: {} } +24ms
  cypress:config:browser validating configuration {} +14ms
  cypress:config:project validate that there is no breaking config options added by setupNodeEvents +3ms
  cypress:config:project config diffs null +1ms
  cypress:config:project merged config object { devServer: { framework: 'angular', bundler: 'webpack' }, specPattern: '**/*.cy.ts', projectRoot: '/home/kussmaul/Documents/gilt', projectName: 'gilt', repoRoot: '/home/kussmaul/Documents/gilt', rawJson: { e2e: { baseUrl: 'http://localhost:4200', supportFile: 'cypress/support/component.ts' }, component: { devServer: [Object], specPattern: '**/*.cy.ts' }, devServer: { framework: 'angular', bundler: 'webpack' }, specPattern: '**/*.cy.ts', envFile: {}, projectRoot: '/home/kussmaul/Documents/gilt', projectName: 'gilt', repoRoot: '/home/kussmaul/Documents/gilt' }, configFile: 'cypress.config.ts', animationDistanceThreshold: 5, arch: 'x64', baseUrl: null, blockHosts: null, chromeWebSecurity: true, clientCertificates: [], defaultCommandTimeout: 4000, downloadsFolder: '/home/kussmaul/Documents/gilt/cypress/downloads', env: {}, execTimeout: 60000, experimentalFetchPolyfill: false, experimentalInteractiveRunEvents: false, experimentalRunAllSpecs: false, experimentalModifyObstructiveThirdPartyCode: false, experimentalOriginDependencies: false, experimentalSourceRewriting: false, experimentalSingleTabRunMode: false, experimentalStudio: false, experimentalWebKitSupport: false, fileServerFolder: '/home/kussmaul/Documents/gilt', fixturesFolder: '/home/kussmaul/Documents/gilt/cypress/fixtures', excludeSpecPattern: [ '**/__snapshots__/*', '**/__image_snapshots__/*' ], includeShadowDom: false, keystrokeDelay: 0, modifyObstructiveCode: true, nodeVersion: undefined, numTestsKeptInMemory: 50, platform: 'linux', pageLoadTimeout: 60000, port: null, projectId: null, redirectionLimit: 20, reporter: 'spec', reporterOptions: null, requestTimeout: 5000, resolvedNodePath: '/usr/bin/node', resolvedNodeVersion: '16.18.1', responseTimeout: 30000, retries: { runMode: 0, openMode: 0 }, screenshotOnRunFailure: true, screenshotsFolder: '/home/kussmaul/Documents/gilt/cypress/screenshots', slowTestThreshold: 250, scrollBehavior: 'top', supportFile: '/home/kussmaul/Documents/gilt/cypress/support/component.ts', supportFolder: '/home/kussmaul/Documents/gilt/cypress/support', taskTimeout: 60000, testIsolation: true, trashAssetsBeforeRuns: true, userAgent: null, video: true, videoCompression: 32, videosFolder: '/home/kussmaul/Documents/gilt/cypress/videos', videoUploadOnPasses: true, viewportHeight: 500, viewportWidth: 500, waitForAnimations: true, watchForFileChanges: true, additionalIgnorePattern: 'cypress/e2e/**/*.cy.{js,jsx,ts,tsx}', autoOpen: false, browsers: [ { name: 'chromium', family: 'chromium', channel: 'stable', displayName: 'Chromium', version: '105.0.5195.125', path: 'chromium-browser', minSupportedVersion: 64, majorVersion: '105' }, { name: 'electron', channel: 'stable', family: 'chromium', displayName: 'Electron', version: '106.0.5249.51', path: '', majorVersion: 106 } ], clientRoute: '/__/', cypressBinaryRoot: '/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app', devServerPublicPathRoute: '/__cypress/src', hosts: null, isInteractive: true, isTextTerminal: false, morgan: true, namespace: '__cypress', reporterRoute: '/__cypress/reporter', socketId: null, socketIoCookie: '__socket', socketIoRoute: '/__socket', version: '12.2.0', indexHtmlFile: 'cypress/support/component-index.html', cypressEnv: 'production', resolved: { animationDistanceThreshold: { value: 5, from: 'default' }, arch: { value: 'x64', from: 'default' }, baseUrl: { value: null, from: 'default' }, blockHosts: { value: null, from: 'default' }, chromeWebSecurity: { value: true, from: 'default' }, clientCertificates: { value: [], from: 'default' }, defaultCommandTimeout: { value: 4000, from: 'default' }, downloadsFolder: { value: 'cypress/downloads', from: 'default' }, env: {}, execTimeout: { value: 60000, from: 'default' }, experimentalFetchPolyfill: { value: false, from: 'default' }, experimentalInteractiveRunEvents: { value: false, from: 'default' }, experimentalRunAllSpecs: { value: false, from: 'default' }, experimentalModifyObstructiveThirdPartyCode: { value: false, from: 'default' }, experimentalOriginDependencies: { value: false, from: 'default' }, experimentalSourceRewriting: { value: false, from: 'default' }, experimentalSingleTabRunMode: { value: false, from: 'default' }, experimentalStudio: { value: false, from: 'default' }, experimentalWebKitSupport: { value: false, from: 'default' }, fileServerFolder: { value: '', from: 'default' }, fixturesFolder: { value: 'cypress/fixtures', from: 'default' }, excludeSpecPattern: { value: [Array], from: 'default' }, includeShadowDom: { value: false, from: 'default' }, keystrokeDelay: { value: 0, from: 'default' }, modifyObstructiveCode: { value: true, from: 'default' }, nodeVersion: { value: undefined, from: 'default' }, numTestsKeptInMemory: { value: 50, from: 'default' }, platform: { value: 'linux', from: 'default' }, pageLoadTimeout: { value: 60000, from: 'default' }, port: { value: null, from: 'default' }, projectId: { value: null, from: 'default' }, redirectionLimit: { value: 20, from: 'default' }, reporter: { value: 'spec', from: 'default' }, reporterOptions: { value: null, from: 'default' }, requestTimeout: { value: 5000, from: 'default' }, resolvedNodePath: { value: null, from: 'default' }, resolvedNodeVersion: { value: null, from: 'default' }, responseTimeout: { value: 30000, from: 'default' }, retries: { value: [Object], from: 'default' }, screenshotOnRunFailure: { value: true, from: 'default' }, screenshotsFolder: { value: 'cypress/screenshots', from: 'default' }, slowTestThreshold: { value: 250, from: 'default' }, scrollBehavior: { value: 'top', from: 'default' }, supportFile: { value: 'cypress/support/component.{js,jsx,ts,tsx}', from: 'default' }, supportFolder: { value: false, from: 'default' }, taskTimeout: { value: 60000, from: 'default' }, testIsolation: { value: true, from: 'default' }, trashAssetsBeforeRuns: { value: true, from: 'default' }, userAgent: { value: null, from: 'default' }, video: { value: true, from: 'default' }, videoCompression: { value: 32, from: 'default' }, videosFolder: { value: 'cypress/videos', from: 'default' }, videoUploadOnPasses: { value: true, from: 'default' }, viewportHeight: { value: 500, from: 'default' }, viewportWidth: { value: 500, from: 'default' }, waitForAnimations: { value: true, from: 'default' }, watchForFileChanges: { value: true, from: 'default' }, specPattern: { value: '**/*.cy.ts', from: 'config' }, browsers: { value: [Array], from: 'runtime' }, hosts: { value: null, from: 'default' }, isInteractive: { value: true, from: 'default' } } } +1ms
  cypress:config:project merged plugins config { devServer: { framework: 'angular', bundler: 'webpack' }, specPattern: '**/*.cy.ts', projectRoot: '/home/kussmaul/Documents/gilt', projectName: 'gilt', repoRoot: '/home/kussmaul/Documents/gilt', rawJson: { e2e: { baseUrl: 'http://localhost:4200', supportFile: 'cypress/support/component.ts' }, component: { devServer: [Object], specPattern: '**/*.cy.ts' }, devServer: { framework: 'angular', bundler: 'webpack' }, specPattern: '**/*.cy.ts', envFile: {}, projectRoot: '/home/kussmaul/Documents/gilt', projectName: 'gilt', repoRoot: '/home/kussmaul/Documents/gilt' }, configFile: 'cypress.config.ts', animationDistanceThreshold: 5, arch: 'x64', baseUrl: null, blockHosts: null, chromeWebSecurity: true, clientCertificates: [], defaultCommandTimeout: 4000, downloadsFolder: '/home/kussmaul/Documents/gilt/cypress/downloads', env: {}, execTimeout: 60000, experimentalFetchPolyfill: false, experimentalInteractiveRunEvents: false, experimentalRunAllSpecs: false, experimentalModifyObstructiveThirdPartyCode: false, experimentalOriginDependencies: false, experimentalSourceRewriting: false, experimentalSingleTabRunMode: false, experimentalStudio: false, experimentalWebKitSupport: false, fileServerFolder: '/home/kussmaul/Documents/gilt', fixturesFolder: '/home/kussmaul/Documents/gilt/cypress/fixtures', excludeSpecPattern: [ '**/__snapshots__/*', '**/__image_snapshots__/*' ], includeShadowDom: false, keystrokeDelay: 0, modifyObstructiveCode: true, nodeVersion: undefined, numTestsKeptInMemory: 50, platform: 'linux', pageLoadTimeout: 60000, port: null, projectId: null, redirectionLimit: 20, reporter: 'spec', reporterOptions: null, requestTimeout: 5000, resolvedNodePath: '/usr/bin/node', resolvedNodeVersion: '16.18.1', responseTimeout: 30000, retries: { runMode: 0, openMode: 0 }, screenshotOnRunFailure: true, screenshotsFolder: '/home/kussmaul/Documents/gilt/cypress/screenshots', slowTestThreshold: 250, scrollBehavior: 'top', supportFile: '/home/kussmaul/Documents/gilt/cypress/support/component.ts', supportFolder: '/home/kussmaul/Documents/gilt/cypress/support', taskTimeout: 60000, testIsolation: true, trashAssetsBeforeRuns: true, userAgent: null, video: true, videoCompression: 32, videosFolder: '/home/kussmaul/Documents/gilt/cypress/videos', videoUploadOnPasses: true, viewportHeight: 500, viewportWidth: 500, waitForAnimations: true, watchForFileChanges: true, additionalIgnorePattern: 'cypress/e2e/**/*.cy.{js,jsx,ts,tsx}', autoOpen: false, browsers: [ { name: 'chromium', family: 'chromium', channel: 'stable', displayName: 'Chromium', version: '105.0.5195.125', path: 'chromium-browser', minSupportedVersion: 64, majorVersion: '105' }, { name: 'electron', channel: 'stable', family: 'chromium', displayName: 'Electron', version: '106.0.5249.51', path: '', majorVersion: 106 } ], clientRoute: '/__/', cypressBinaryRoot: '/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app', devServerPublicPathRoute: '/__cypress/src', hosts: null, isInteractive: true, isTextTerminal: false, morgan: true, namespace: '__cypress', reporterRoute: '/__cypress/reporter', socketId: null, socketIoCookie: '__socket', socketIoRoute: '/__socket', version: '12.2.0', indexHtmlFile: 'cypress/support/component-index.html', cypressEnv: 'production', resolved: { animationDistanceThreshold: { value: 5, from: 'default' }, arch: { value: 'x64', from: 'default' }, baseUrl: { value: null, from: 'default' }, blockHosts: { value: null, from: 'default' }, chromeWebSecurity: { value: true, from: 'default' }, clientCertificates: { value: [], from: 'default' }, defaultCommandTimeout: { value: 4000, from: 'default' }, downloadsFolder: { value: 'cypress/downloads', from: 'default' }, env: {}, execTimeout: { value: 60000, from: 'default' }, experimentalFetchPolyfill: { value: false, from: 'default' }, experimentalInteractiveRunEvents: { value: false, from: 'default' }, experimentalRunAllSpecs: { value: false, from: 'default' }, experimentalModifyObstructiveThirdPartyCode: { value: false, from: 'default' }, experimentalOriginDependencies: { value: false, from: 'default' }, experimentalSourceRewriting: { value: false, from: 'default' }, experimentalSingleTabRunMode: { value: false, from: 'default' }, experimentalStudio: { value: false, from: 'default' }, experimentalWebKitSupport: { value: false, from: 'default' }, fileServerFolder: { value: '', from: 'default' }, fixturesFolder: { value: 'cypress/fixtures', from: 'default' }, excludeSpecPattern: { value: [Array], from: 'default' }, includeShadowDom: { value: false, from: 'default' }, keystrokeDelay: { value: 0, from: 'default' }, modifyObstructiveCode: { value: true, from: 'default' }, nodeVersion: { value: undefined, from: 'default' }, numTestsKeptInMemory: { value: 50, from: 'default' }, platform: { value: 'linux', from: 'default' }, pageLoadTimeout: { value: 60000, from: 'default' }, port: { value: null, from: 'default' }, projectId: { value: null, from: 'default' }, redirectionLimit: { value: 20, from: 'default' }, reporter: { value: 'spec', from: 'default' }, reporterOptions: { value: null, from: 'default' }, requestTimeout: { value: 5000, from: 'default' }, resolvedNodePath: { value: null, from: 'default' }, resolvedNodeVersion: { value: null, from: 'default' }, responseTimeout: { value: 30000, from: 'default' }, retries: { value: [Object], from: 'default' }, screenshotOnRunFailure: { value: true, from: 'default' }, screenshotsFolder: { value: 'cypress/screenshots', from: 'default' }, slowTestThreshold: { value: 250, from: 'default' }, scrollBehavior: { value: 'top', from: 'default' }, supportFile: { value: 'cypress/support/component.{js,jsx,ts,tsx}', from: 'default' }, supportFolder: { value: false, from: 'default' }, taskTimeout: { value: 60000, from: 'default' }, testIsolation: { value: true, from: 'default' }, trashAssetsBeforeRuns: { value: true, from: 'default' }, userAgent: { value: null, from: 'default' }, video: { value: true, from: 'default' }, videoCompression: { value: 32, from: 'default' }, videosFolder: { value: 'cypress/videos', from: 'default' }, videoUploadOnPasses: { value: true, from: 'default' }, viewportHeight: { value: 500, from: 'default' }, viewportWidth: { value: 500, from: 'default' }, waitForAnimations: { value: true, from: 'default' }, watchForFileChanges: { value: true, from: 'default' }, specPattern: { value: '**/*.cy.ts', from: 'config' }, browsers: { value: [Array], from: 'runtime' }, hosts: { value: null, from: 'default' }, isInteractive: { value: true, from: 'default' } } } +4ms
  cypress:data-context:sources:FileDataSource globbing pattern(s): [ '**/*.cy.ts' ] +31ms
  cypress:data-context:sources:FileDataSource within directory: /home/kussmaul/Documents/gilt +1ms
  cypress:data-context:sources:ProjectDataSource found specs [] +0ms
  cypress:lifecycle:EventRegistrar plugin event registered? { eventName: 'dev-server:start', isRegistered: true } +379ms
  cypress:lifecycle:EventRegistrar execute plugin event 'dev-server:start' Node 'v16.16.0' with args: { specs: [], config: { devServer: { framework: 'angular', bundler: 'webpack' }, specPattern: '**/*.cy.ts', projectRoot: '/home/kussmaul/Documents/gilt', projectName: 'gilt', repoRoot: '/home/kussmaul/Documents/gilt', rawJson: { e2e: [Object], component: [Object], devServer: [Object], specPattern: '**/*.cy.ts', envFile: {}, projectRoot: '/home/kussmaul/Documents/gilt', projectName: 'gilt', repoRoot: '/home/kussmaul/Documents/gilt' }, configFile: 'cypress.config.ts', animationDistanceThreshold: 5, arch: 'x64', baseUrl: null, blockHosts: null, chromeWebSecurity: true, clientCertificates: [], defaultCommandTimeout: 4000, downloadsFolder: '/home/kussmaul/Documents/gilt/cypress/downloads', env: {}, execTimeout: 60000, experimentalFetchPolyfill: false, experimentalInteractiveRunEvents: false, experimentalRunAllSpecs: false, experimentalModifyObstructiveThirdPartyCode: false, experimentalOriginDependencies: false, experimentalSourceRewriting: false, experimentalSingleTabRunMode: false, experimentalStudio: false, experimentalWebKitSupport: false, fileServerFolder: '/home/kussmaul/Documents/gilt', fixturesFolder: '/home/kussmaul/Documents/gilt/cypress/fixtures', excludeSpecPattern: [ '**/__snapshots__/*', '**/__image_snapshots__/*' ], includeShadowDom: false, keystrokeDelay: 0, modifyObstructiveCode: true, nodeVersion: undefined, numTestsKeptInMemory: 50, platform: 'linux', pageLoadTimeout: 60000, port: null, projectId: null, redirectionLimit: 20, reporter: 'spec', reporterOptions: null, requestTimeout: 5000, resolvedNodePath: '/usr/bin/node', resolvedNodeVersion: '16.18.1', responseTimeout: 30000, retries: { runMode: 0, openMode: 0 }, screenshotOnRunFailure: true, screenshotsFolder: '/home/kussmaul/Documents/gilt/cypress/screenshots', slowTestThreshold: 250, scrollBehavior: 'top', supportFile: '/home/kussmaul/Documents/gilt/cypress/support/component.ts', supportFolder: '/home/kussmaul/Documents/gilt/cypress/support', taskTimeout: 60000, testIsolation: true, trashAssetsBeforeRuns: true, userAgent: null, video: true, videoCompression: 32, videosFolder: '/home/kussmaul/Documents/gilt/cypress/videos', videoUploadOnPasses: true, viewportHeight: 500, viewportWidth: 500, waitForAnimations: true, watchForFileChanges: true, additionalIgnorePattern: 'cypress/e2e/**/*.cy.{js,jsx,ts,tsx}', autoOpen: false, browsers: [ [Object], [Object] ], clientRoute: '/__/', cypressBinaryRoot: '/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app', devServerPublicPathRoute: '/__cypress/src', hosts: null, isInteractive: true, isTextTerminal: false, morgan: true, namespace: '__cypress', reporterRoute: '/__cypress/reporter', socketId: null, socketIoCookie: '__socket', socketIoRoute: '/__socket', version: '12.2.0', indexHtmlFile: 'cypress/support/component-index.html', cypressEnv: 'production', resolved: { animationDistanceThreshold: [Object], arch: [Object], baseUrl: [Object], blockHosts: [Object], chromeWebSecurity: [Object], clientCertificates: [Object], defaultCommandTimeout: [Object], downloadsFolder: [Object], env: {}, execTimeout: [Object], experimentalFetchPolyfill: [Object], experimentalInteractiveRunEvents: [Object], experimentalRunAllSpecs: [Object], experimentalModifyObstructiveThirdPartyCode: [Object], experimentalOriginDependencies: [Object], experimentalSourceRewriting: [Object], experimentalSingleTabRunMode: [Object], experimentalStudio: [Object], experimentalWebKitSupport: [Object], fileServerFolder: [Object], fixturesFolder: [Object], excludeSpecPattern: [Object], includeShadowDom: [Object], keystrokeDelay: [Object], modifyObstructiveCode: [Object], nodeVersion: [Object], numTestsKeptInMemory: [Object], platform: [Object], pageLoadTimeout: [Object], port: [Object], projectId: [Object], redirectionLimit: [Object], reporter: [Object], reporterOptions: [Object], requestTimeout: [Object], resolvedNodePath: [Object], resolvedNodeVersion: [Object], responseTimeout: [Object], retries: [Object], screenshotOnRunFailure: [Object], screenshotsFolder: [Object], slowTestThreshold: [Object], scrollBehavior: [Object], supportFile: [Object], supportFolder: [Object], taskTimeout: [Object], testIsolation: [Object], trashAssetsBeforeRuns: [Object], userAgent: [Object], video: [Object], videoCompression: [Object], videosFolder: [Object], videoUploadOnPasses: [Object], viewportHeight: [Object], viewportWidth: [Object], waitForAnimations: [Object], watchForFileChanges: [Object], specPattern: [Object], browsers: [Object], hosts: [Object], isInteractive: [Object] } } } undefined undefined +2ms
  cypress:lifecycle:ProjectConfigManager call event dev-server:start for invocation id inv1 +383ms
  cypress:lifecycle:child:RunPlugins:1272607 execute plugin event: dev-server:start ({ invocationId: 'inv1', eventId: 2 }) +389ms
  cypress:lifecycle:child:run_require_async_child:1272607 unhandled rejection: TypeError: logger.warn is not a function
    at getSupportedBrowsers (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/supported-browsers.js:36:16)
    at normalizeBrowserSchema (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/normalize-builder-schema.js:41:74)
    at generateBrowserWebpackConfigFromContext (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/webpack-browser-config.js:118:66)
    at async getAngularCliWebpackConfig (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/helpers/angularHandler.js:144:24)
    at async angularHandler (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/helpers/angularHandler.js:179:27)
    at async getPreset (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:76:20)
    at async Function.devServer.create (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:93:61)
    at async /home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:25:24 +4s
  cypress:lifecycle:ProjectConfigIpc unhandled error in child process {
  name: 'TypeError',
  message: 'logger.warn is not a function',
  stack: 'TypeError: logger.warn is not a function\n' +
    '    at getSupportedBrowsers (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/supported-browsers.js:36:16)\n' +
    '    at normalizeBrowserSchema (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/normalize-builder-schema.js:41:74)\n' +
    '    at generateBrowserWebpackConfigFromContext (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/webpack-browser-config.js:118:66)\n' +
    '    at async getAngularCliWebpackConfig (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/helpers/angularHandler.js:144:24)\n' +
    '    at async angularHandler (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/helpers/angularHandler.js:179:27)\n' +
    '    at async getPreset (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:76:20)\n' +
    '    at async Function.devServer.create (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:93:61)\n' +
    '    at async /home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:25:24'
} +10s
  cypress:lifecycle:ProjectConfigIpc plugins process error: TypeError: logger.warn is not a function
    at getSupportedBrowsers (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/supported-browsers.js:36:16)
    at normalizeBrowserSchema (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/normalize-builder-schema.js:41:74)
    at generateBrowserWebpackConfigFromContext (/home/kussmaul/Documents/gilt/node_modules/@angular-devkit/build-angular/src/utils/webpack-browser-config.js:118:66)
    at async getAngularCliWebpackConfig (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/helpers/angularHandler.js:144:24)
    at async angularHandler (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/helpers/angularHandler.js:179:27)
    at async getPreset (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:76:20)
    at async Function.devServer.create (/home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:93:61)
    at async /home/kussmaul/.cache/Cypress/12.2.0/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-dev-server/dist/devServer.js:25:24 +1ms

Other

I am not familiar with the code for @cypress/webpack-dev-server or @angular-devkit/build-angular, but it looks like
Angular's normalizeBrowserSchema() and getSupportedBrowsers() expect a logger object:
https://github.com/angular/angular-cli/blob/2ba44a433c827413a53d12de0ef203f8988ddc2a/packages/angular_devkit/build_angular/src/utils/normalize-builder-schema.ts
https://github.com/angular/angular-cli/blob/2ba44a433c827413a53d12de0ef203f8988ddc2a/packages/angular_devkit/build_angular/src/utils/supported-browsers.ts
and the only logger I see in angularHandler.ts is in createFakeContext()
https://github.com/cypress-io/cypress/blob/331c1dcc9c3f4d4212e27290d705ed94ba58c3d0/npm/webpack-dev-server/src/helpers/angularHandler.ts

@lmiller1990
Copy link
Contributor

Hi! Can you share your Angular project (minimal repro) as well as the before/after of .browserslistrc?

We've got a bunch of tests around Angular vesions and Webpack, but we must be missing this particular combination.

@lmiller1990 lmiller1990 added npm: @cypress/angular @cypress/angular package issues CT Issue related to component testing labels Dec 29, 2022
@lmiller1990 lmiller1990 self-assigned this Dec 29, 2022
@kussmaul
Copy link
Author

Hi @lmiller1990, yes, I will try to make a minimal repro, but it may take some time. I use Angular 15.0.4, and just installed Cypress so I don't know what happens in earlier versions. Here is my .browserslist - I think it was the original default, and then I added the last 3 lines to exclude unsupported browsers.

# You can see what browsers were selected by your queries by running:
#   npx browserslist

> 0.5%
last 2 versions
Firefox ESR
not dead
not IE 9-11 # For IE 9-11 support, remove 'not'.
# disabled because Cypress Component Testing crashes for unsupported browsers
not kaios 2.5
not op_mini all

@nagash77 nagash77 assigned astone123 and unassigned lmiller1990 Jan 9, 2023
@astone123
Copy link
Contributor

@kussmaul apologies for the delayed reply. I was able to reproduce this with your .browserslistrc file using Angular 15, as well as your workaround. When you say that this was the original default, do you mean that the file was generated by the Angular CLI? Thanks

@kussmaul
Copy link
Author

@astone123 , sorry I somehow missed your message. Yes, I think that the .browserslistrc I shared was generated by Angular (but I'm not certain and it was likely Angular from ~2020.
Thank you (and @mike-plummer) for tracking this down and fixing!

@cypress-bot
Copy link
Contributor

cypress-bot bot commented Jan 24, 2023

Released in 12.4.0.

This comment thread has been locked. If you are still experiencing this issue after upgrading to
Cypress v12.4.0, please open a new issue.

@cypress-bot cypress-bot bot locked as resolved and limited conversation to collaborators Jan 24, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
CT Issue related to component testing npm: @cypress/angular @cypress/angular package issues
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants