Files
overleaf-cep/server-ce/test/cypress.config.ts
T
Anna Claire Fields 8f07308342 Acf pnp migration master (#34040)
GitOrigin-RevId: 418eab9bc733f27a6e0f8f04a2a8e21c2f5a491f
2026-06-17 08:07:16 +00:00

71 lines
2.2 KiB
TypeScript

import { defineConfig } from 'cypress'
import { readFileInZip, readPdf } from './helpers/read-file'
import fs from 'node:fs'
if (process.env.CYPRESS_SHARD && !process.env.SPEC_PATTERN) {
// Running Cypress on all the specs is wasteful (~1min) when only few of them
// will have relevant tasks to run for a given shard. Filter the spec files
// based on the existence of the shard identifier in the spec source.
const files = []
for (const name of fs.readdirSync('.')) {
if (!name.endsWith('.spec.ts')) continue
const src = fs.readFileSync(name, 'utf-8')
if (!src.includes('isExcludedBySharding(')) {
throw new Error(
`Spec ${name} is not using sharding. Add an appropriate "'if (isExcludedBySharding('...')) return" call.`
)
}
if (!src.includes(process.env.CYPRESS_SHARD)) continue
files.push(name)
}
if (files.length === 0) {
throw new Error(
`Bad process.env.CYPRESS_SHARD=${process.env.CYPRESS_SHARD}; no spec files matched!`
)
}
if (files.length === 1) {
// Cypress does not like `{single-file}`. Make this a special case.
process.env.SPEC_PATTERN = `./${files[0]}`
} else {
process.env.SPEC_PATTERN = `./{${files.join(',')}}`
}
}
const specPattern = process.env.SPEC_PATTERN || './**/*.spec.ts'
// Cypress's Electron process uses PackherdModuleLoader which doesn't go through
// PnP hooks. Reporter packages are materialized into /tmp/cypress-reporter by
// scripts/materialize-cypress-reporter.cjs at container startup.
let reporterOptions = {}
if (process.env.CI) {
reporterOptions = {
reporter: '/tmp/cypress-reporter/node_modules/cypress-multi-reporters',
reporterOptions: {
configFile: 'cypress/cypress-multi-reporters.cjs',
},
}
}
export default defineConfig({
defaultCommandTimeout: 10_000,
fixturesFolder: 'cypress/fixtures',
video: process.env.CYPRESS_VIDEO === 'true',
screenshotsFolder: 'cypress/results',
videosFolder: 'cypress/results',
viewportHeight: 768,
viewportWidth: 1024,
e2e: {
setupNodeEvents(on) {
on('task', {
readPdf,
readFileInZip,
})
},
specPattern,
},
retries: {
runMode: 3,
},
...reporterOptions,
})