Files
cypress/system-tests/test/config_spec.js

260 lines
7.7 KiB
JavaScript

const systemTests = require('../lib/system-tests').default
const { fs } = require('@packages/server/lib/util/fs')
const path = require('path')
const Fixtures = require('../lib/fixtures')
describe('e2e config', () => {
systemTests.setup()
it('provides various environment details', function () {
return systemTests.exec(this, {
spec: 'config_passing.cy.js',
snapshot: true,
config: {
env: {
scriptlet: '<script>alert(\'this should not break\')</script>',
},
},
})
})
it('applies defaultCommandTimeout globally', function () {
return systemTests.exec(this, {
project: 'config-with-short-timeout',
snapshot: true,
expectedExitCode: 1,
})
})
// TODO: test that environment variables and CYPRESS_config work as well
it('throws error when invalid viewportWidth in the configuration file', function () {
return systemTests.exec(this, {
project: 'config-with-invalid-viewport',
expectedExitCode: 1,
snapshot: true,
})
})
it('throws error when invalid browser in the configuration file', function () {
return systemTests.exec(this, {
project: 'config-with-invalid-browser',
expectedExitCode: 1,
snapshot: true,
})
})
it('supports global shadow dom inclusion', function () {
return systemTests.exec(this, {
project: 'shadow-dom-global-inclusion',
})
})
it('supports custom configFile in JavaScript', function () {
return systemTests.exec(this, {
project: 'config-with-custom-file-js',
configFile: 'cypress.config.custom.js',
})
})
it('supports custom configFile in TypeScript', function () {
return systemTests.exec(this, {
project: 'config-with-custom-file-ts',
configFile: 'cypress.config.custom.ts',
})
})
it('supports custom configFile in a default JavaScript file', function () {
return systemTests.exec(this, {
project: 'config-with-js',
})
})
it('supports custom configFile in a default TypeScript file', function () {
return systemTests.exec(this, {
project: 'config-with-ts',
})
})
it('throws error when multiple default config file are found in project', async function () {
await Fixtures.scaffoldProject('pristine-with-e2e-testing')
const projectRoot = Fixtures.projectPath('pristine-with-e2e-testing')
return fs.writeFile(path.join(projectRoot, 'cypress.config.ts'), 'export default {}').then(() => {
return systemTests.exec(this, {
project: 'pristine-with-e2e-testing',
expectedExitCode: 1,
snapshot: true,
})
})
})
it('throws error when cypress.json is found in project and need migration', async function () {
await Fixtures.scaffoldProject('pristine')
const projectRoot = Fixtures.projectPath('pristine')
return fs.writeFile(path.join(projectRoot, 'cypress.json'), '{}').then(() => {
return systemTests.exec(this, {
project: 'pristine',
expectedExitCode: 1,
snapshot: true,
})
})
})
it('throws error when cypress.json is found in project and cypress.config.{js,ts,mjs,cjs} exists as well', async function () {
await Fixtures.scaffoldProject('multiple-config-files-with-json')
return systemTests.exec(this, {
project: 'multiple-config-files-with-json',
expectedExitCode: 1,
snapshot: true,
})
})
it('throws an error if supportFile is set on the root level', async function () {
await Fixtures.scaffoldProject('invalid-root-level-config')
return systemTests.exec(this, {
project: 'invalid-root-level-config',
configFile: 'invalid-supportFile.config.js',
expectedExitCode: 1,
snapshot: true,
})
})
it('throws an error if cypress.env.json specifies invalid property', async function () {
await Fixtures.scaffoldProject('invalid-env-file')
return systemTests.exec(this, {
project: 'invalid-env-file',
expectedExitCode: 1,
snapshot: true,
})
})
it('throws an error if specPattern is set on the root level', async function () {
await Fixtures.scaffoldProject('invalid-root-level-config')
return systemTests.exec(this, {
project: 'invalid-root-level-config',
configFile: 'invalid-specPattern.config.js',
expectedExitCode: 1,
snapshot: true,
})
})
it('throws an error if excludeSpecPattern is set on the root level', async function () {
await Fixtures.scaffoldProject('invalid-root-level-config')
return systemTests.exec(this, {
project: 'invalid-root-level-config',
configFile: 'invalid-excludeSpecPattern.config.js',
expectedExitCode: 1,
snapshot: true,
})
})
it('throws an error if baseUrl is set on the root level', async function () {
await Fixtures.scaffoldProject('invalid-root-level-config')
return systemTests.exec(this, {
project: 'invalid-root-level-config',
configFile: 'invalid-baseUrl-config.js',
expectedExitCode: 1,
snapshot: true,
})
})
it('throws an error if baseUrl is set on the component level', async function () {
await Fixtures.scaffoldProject('invalid-root-level-config')
return systemTests.exec(this, {
project: 'invalid-root-level-config',
configFile: 'invalid-component-baseUrl-config.js',
testingType: 'component',
expectedExitCode: 1,
snapshot: true,
})
})
it('throws an error if indexHtml is set on the root level', async function () {
await Fixtures.scaffoldProject('invalid-root-level-config')
return systemTests.exec(this, {
project: 'invalid-root-level-config',
configFile: 'invalid-indexHtmlFile-config.js',
expectedExitCode: 1,
snapshot: true,
})
})
it('throws an error if indexHtml is set on the e2e level', async function () {
await Fixtures.scaffoldProject('invalid-root-level-config')
return systemTests.exec(this, {
project: 'invalid-root-level-config',
configFile: 'invalid-e2e-indexHtmlFile-config.js',
testingType: 'e2e',
expectedExitCode: 1,
snapshot: true,
})
})
it('throws an error if testFiles is set on the config file', async function () {
await Fixtures.scaffoldProject('invalid-root-level-config')
return systemTests.exec(this, {
project: 'invalid-root-level-config',
configFile: 'invalid-testFiles-config.js',
expectedExitCode: 1,
snapshot: true,
})
})
it('setupNodeEvents modify specPattern for current testing type', async function () {
await Fixtures.scaffoldProject('e2e')
return systemTests.exec(this, {
project: 'e2e',
configFile: 'cypress-setupNodeEvents-modify-config.config.js',
snapshot: true,
})
})
it('throws an error if componentFolder is set on the config file', async function () {
await Fixtures.scaffoldProject('invalid-root-level-config')
return systemTests.exec(this, {
project: 'invalid-root-level-config',
configFile: 'invalid-componentFolder-config.js',
expectedExitCode: 1,
snapshot: true,
})
})
it('finds supportFiles in projects containing glob syntax', async function () {
await Fixtures.scaffoldProject('project-with-(glob)-[chars]')
return systemTests.exec(this, {
project: 'project-with-(glob)-[chars]',
snapshot: true,
})
})
it('launches browser using config.defaultBrowser', async function () {
await Fixtures.scaffoldProject('config-defaultBrowser')
return systemTests.exec(this, {
project: 'config-defaultBrowser',
command: 'cypress',
args: ['run', '--dev', '--project', path.resolve(process.cwd(), './projects/config-defaultBrowser')],
onStdout: (stdout) => {
expect(stdout).to.include('Browser: Chrome')
},
})
})
})