diff --git a/npm/react/cypress/component/advanced/timers/card-spec.js b/npm/react/cypress/component/advanced/timers/card-spec.js index becdf5caaff0..7611c2d5e53c 100644 --- a/npm/react/cypress/component/advanced/timers/card-spec.js +++ b/npm/react/cypress/component/advanced/timers/card-spec.js @@ -8,7 +8,7 @@ it('should select null after timing out', () => { const onSelect = cy.stub().as('selected') mount() - cy.get('@selected', { timeout: 5500 }).should('have.been.calledWith', null) + cy.get('@selected', { timeout: 6000 }).should('have.been.calledWith', null) }) it('should accept selections', () => { diff --git a/npm/webpack-dev-server/src/loader.ts b/npm/webpack-dev-server/src/loader.ts index be6f2b3ae41a..e5803b6b4665 100644 --- a/npm/webpack-dev-server/src/loader.ts +++ b/npm/webpack-dev-server/src/loader.ts @@ -1,8 +1,10 @@ /* global Cypress */ /// +import debugFn from 'debug' import * as path from 'path' import { CypressCTWebpackContext } from './plugin' +const debug = debugFn('cypress:webpack-dev-server:webpack') /** * @param {ComponentSpec} file spec to create import string from. @@ -15,8 +17,8 @@ const makeImport = (file: Cypress.Cypress['spec'], filename: string, chunkName: const magicComments = chunkName ? `/* webpackChunkName: "${chunkName}" */` : '' return `"${filename}": { - shouldLoad: () => document.location.pathname.includes(${JSON.stringify(file.relative)}), - load: () => import(${JSON.stringify(path.resolve(projectRoot, file.relative))} ${magicComments}), + shouldLoad: () => document.location.pathname.includes("${file.absolute}"), + load: () => import("${file.absolute}" ${magicComments}), chunkName: "${chunkName}", }` } @@ -39,6 +41,8 @@ const makeImport = (file: Cypress.Cypress['spec'], filename: string, chunkName: function buildSpecs (projectRoot: string, files: Cypress.Cypress['spec'][] = []): string { if (!Array.isArray(files)) return `{}` + debug(`projectRoot: ${projectRoot}, files: ${files.map((f) => f.absolute).join(',')}`) + return `{${files.map((f, i) => { return makeImport(f, f.name, `spec-${i}`, projectRoot) }).join(',')}}` diff --git a/npm/webpack-dev-server/src/startServer.ts b/npm/webpack-dev-server/src/startServer.ts index 7c9a54736e14..e3059d8c5b5e 100644 --- a/npm/webpack-dev-server/src/startServer.ts +++ b/npm/webpack-dev-server/src/startServer.ts @@ -46,12 +46,12 @@ export async function start ({ webpackConfig: userWebpackConfig, options, ...use debug('starting webpack dev server') - const webpackDevServerConfig = { + const webpackDevServerConfig: WebpackDevServer.Configuration = { ...userWebpackConfig.devServer, hot: false, inline: false, publicPath: devServerPublicPathRoute, - noInfo: true, + noInfo: false, } return new WebpackDevServer(compiler, webpackDevServerConfig) diff --git a/packages/runner-ct/src/app/RunnerCt.tsx b/packages/runner-ct/src/app/RunnerCt.tsx index 16f8f024559a..9d1ba9571f26 100644 --- a/packages/runner-ct/src/app/RunnerCt.tsx +++ b/packages/runner-ct/src/app/RunnerCt.tsx @@ -81,6 +81,8 @@ const buildNavItems = (eventManager: typeof EventManager, toggleIsSetListOpen: ( }, ] +const removeRelativeRegexp = /\.\.\//gi + const RunnerCt = namedObserver('RunnerCt', (props: RunnerCtProps) => { const searchRef = React.useRef(null) @@ -92,7 +94,10 @@ const RunnerCt = namedObserver('RunnerCt', const runSpec = React.useCallback((file: FileNode) => { setActiveIndex(0) - const selectedSpec = props.state.specs.find((spec) => spec.absolute.includes(file.relative)) + // We request an absolute path from the dev server but the spec list displays relative paths + // For this reason to match the spec we remove leading relative paths. Eg ../../foo.js -> foo.js. + const filePath = file.relative.replace(removeRelativeRegexp, '') + const selectedSpec = props.state.specs.find((spec) => spec.absolute.includes(filePath)) if (!selectedSpec) { throw Error(`Could not find spec matching ${file.relative}.`) diff --git a/packages/runner-ct/src/iframe/iframes.jsx b/packages/runner-ct/src/iframe/iframes.jsx index 9d9b4ccfcb48..0335b0059153 100644 --- a/packages/runner-ct/src/iframe/iframes.jsx +++ b/packages/runner-ct/src/iframe/iframes.jsx @@ -14,7 +14,7 @@ import styles from '../app/RunnerCt.module.scss' import './iframes.scss' export function getSpecUrl ({ namespace, spec }, prefix = '') { - return spec ? `${prefix}/${namespace}/iframes/${spec.relative}` : '' + return spec ? `${prefix}/${namespace}/iframes/${spec.absolute}` : '' } @observer diff --git a/packages/server-ct/test/fixtures/projects/nested-config/component-files/greet.js b/packages/server-ct/test/fixtures/projects/nested-config/component-files/greet.js new file mode 100644 index 000000000000..48753a56e425 --- /dev/null +++ b/packages/server-ct/test/fixtures/projects/nested-config/component-files/greet.js @@ -0,0 +1,5 @@ +export function greet() { + const el = document.createElement('div') + el.textContent = 'Hello world' + document.body.appendChild(el) +} \ No newline at end of file diff --git a/packages/server-ct/test/fixtures/projects/nested-config/component-files/greet.spec.js b/packages/server-ct/test/fixtures/projects/nested-config/component-files/greet.spec.js new file mode 100644 index 000000000000..7d9c19685c52 --- /dev/null +++ b/packages/server-ct/test/fixtures/projects/nested-config/component-files/greet.spec.js @@ -0,0 +1,6 @@ +import { greet } from './greet' + +it('greets', () => { + greet() + cy.get('div').contains('Hello world') +}) diff --git a/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress.json b/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress.json new file mode 100644 index 000000000000..e89c33b9d515 --- /dev/null +++ b/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress.json @@ -0,0 +1,6 @@ +{ + "component": { + "componentFolder": "../component-files", + "testFiles": "**/*.spec.js" + } +} diff --git a/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress/fixtures/.keep b/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress/fixtures/.keep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress/integration/.keep b/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress/integration/.keep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress/plugins/index.js b/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress/plugins/index.js new file mode 100644 index 000000000000..62eadc2e03f5 --- /dev/null +++ b/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress/plugins/index.js @@ -0,0 +1,7 @@ +const { startDevServer } = require('@cypress/webpack-dev-server') + +module.exports = (on, config) => { + on('dev-server:start', (options) => startDevServer({ options, webpackConfig: {} })) + + return config +} diff --git a/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress/support/.keep b/packages/server-ct/test/fixtures/projects/nested-config/configuration/cypress/support/.keep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/server-ct/test/fixtures/projects/nested-config/package.json b/packages/server-ct/test/fixtures/projects/nested-config/package.json new file mode 100644 index 000000000000..4c0a6498e657 --- /dev/null +++ b/packages/server-ct/test/fixtures/projects/nested-config/package.json @@ -0,0 +1,6 @@ +{ + "scripts": { + "cy:run": "node ../../../../../../scripts/cypress.js run-ct --project configuration", + "cy:open": "node ../../../../../../scripts/cypress.js open-ct --project configuration" + } +}