cypress.config.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { defineConfig } from 'cypress'
  2. import { rm } from 'node:fs/promises'
  3. import { resolve } from 'node:path'
  4. import { initPlugin as initVisualRegressionPlugin } from '@frsource/cypress-plugin-visual-regression-diff/plugins'
  5. import pkg from '../package.json'
  6. const isCYCI = !process.env.CY_OPEN
  7. const root = resolve(__dirname, '..')
  8. // we don't need to optimize graphql and apollo
  9. const skipDeps = ['graphql', 'apollo']
  10. export default defineConfig({
  11. videosFolder: '.cypress/videos',
  12. supportFolder: '.cypress/support/index.js',
  13. fixturesFolder: '.cypress/fixtures',
  14. downloadsFolder: '.cypress/downloads',
  15. screenshotsFolder: '.cypress/screenshots',
  16. videoCompression: false,
  17. env: {
  18. CY_CI: isCYCI,
  19. pluginVisualRegressionDiffConfig: {
  20. threshold: 0.02,
  21. },
  22. pluginVisualRegressionMaxDiffThreshold: 0.02,
  23. },
  24. component: {
  25. supportFile: '.cypress/support/index.js',
  26. setupNodeEvents(on, config) {
  27. on('after:spec', (spec, results) => {
  28. if (results && results.stats.failures === 0 && results.video) {
  29. return rm(results.video)
  30. }
  31. })
  32. initVisualRegressionPlugin(on, config)
  33. on('before:browser:launch', (browser, launchOptions) => {
  34. if (browser?.family === 'chromium' && browser?.name !== 'electron') {
  35. launchOptions.args.push('--force-device-scale-factor=2')
  36. }
  37. return launchOptions
  38. })
  39. },
  40. devServer: {
  41. framework: 'vue',
  42. bundler: 'vite',
  43. viteConfig: {
  44. mode: 'cypress',
  45. root,
  46. configFile: resolve(__dirname, '..', 'vite.config.ts'),
  47. cacheDir: resolve(__dirname, 'node_modules', '.vite'),
  48. server: {
  49. fs: {
  50. strict: false,
  51. },
  52. hmr: true,
  53. ...(isCYCI && { watch: { ignored: ['**/*'] } }),
  54. },
  55. optimizeDeps: {
  56. entries: [
  57. '**/cypress/**/*.cy.ts',
  58. '!**/node_modules/**',
  59. '!**/*.d.ts',
  60. ],
  61. include: [
  62. // if you see cypress failing on some dependency, add it to skipDeps
  63. ...Object.keys(pkg.dependencies).filter(
  64. (name) => !skipDeps.some((dep) => name.includes(dep)),
  65. ),
  66. ],
  67. },
  68. },
  69. },
  70. // iPhone 12 viewport
  71. viewportWidth: 390,
  72. viewportHeight: 844,
  73. fileServerFolder: '..',
  74. indexHtmlFile: '.cypress/support/component-index.html',
  75. specPattern: ['app/frontend/cypress/**/*.cy.{js,jsx,ts,tsx}'],
  76. },
  77. retries: 0,
  78. })