cypress.config.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import {
  2. applyChangesToNextcloud,
  3. configureNextcloud,
  4. startNextcloud,
  5. stopNextcloud,
  6. waitOnNextcloud,
  7. } from './cypress/dockerNode'
  8. import { defineConfig } from 'cypress'
  9. import webpackPreprocessor from '@cypress/webpack-preprocessor'
  10. import type { Configuration } from 'webpack'
  11. import webpackConfig from './webpack.config.js'
  12. export default defineConfig({
  13. projectId: '37xpdh',
  14. // 16/9 screen ratio
  15. viewportWidth: 1280,
  16. viewportHeight: 720,
  17. // Tries again 2 more times on failure
  18. retries: {
  19. runMode: 2,
  20. // do not retry in `cypress open`
  21. openMode: 0,
  22. },
  23. // Needed to trigger `after:run` events with cypress open
  24. experimentalInteractiveRunEvents: true,
  25. // faster video processing
  26. videoCompression: false,
  27. // Visual regression testing
  28. env: {
  29. failSilently: false,
  30. type: 'actual',
  31. },
  32. screenshotsFolder: 'cypress/snapshots/actual',
  33. trashAssetsBeforeRuns: true,
  34. e2e: {
  35. // Disable session isolation
  36. testIsolation: false,
  37. // We've imported your old cypress plugins here.
  38. // You may want to clean this up later by importing these.
  39. async setupNodeEvents(on, config) {
  40. on('file:preprocessor', webpackPreprocessor({ webpackOptions: webpackConfig as Configuration }))
  41. // Disable spell checking to prevent rendering differences
  42. on('before:browser:launch', (browser, launchOptions) => {
  43. if (browser.family === 'chromium' && browser.name !== 'electron') {
  44. launchOptions.preferences.default['browser.enable_spellchecking'] = false
  45. return launchOptions
  46. }
  47. if (browser.family === 'firefox') {
  48. launchOptions.preferences['layout.spellcheckDefault'] = 0
  49. return launchOptions
  50. }
  51. if (browser.name === 'electron') {
  52. launchOptions.preferences.spellcheck = false
  53. return launchOptions
  54. }
  55. })
  56. // Remove container after run
  57. on('after:run', () => {
  58. if (!process.env.CI) {
  59. stopNextcloud()
  60. }
  61. })
  62. // Before the browser launches
  63. // starting Nextcloud testing container
  64. return startNextcloud(process.env.BRANCH)
  65. .then((ip) => {
  66. // Setting container's IP as base Url
  67. config.baseUrl = `http://${ip}/index.php`
  68. return ip
  69. })
  70. .then(waitOnNextcloud)
  71. .then(configureNextcloud)
  72. .then(applyChangesToNextcloud)
  73. .then(() => {
  74. return config
  75. })
  76. },
  77. },
  78. component: {
  79. devServer: {
  80. framework: 'vue',
  81. bundler: 'webpack',
  82. webpackConfig: async () => {
  83. process.env.npm_package_name = 'NcCypress'
  84. process.env.npm_package_version = '1.0.0'
  85. process.env.NODE_ENV = 'development'
  86. /**
  87. * Needed for cypress stubbing
  88. *
  89. * @see https://github.com/sinonjs/sinon/issues/1121
  90. * @see https://github.com/cypress-io/cypress/issues/18662
  91. */
  92. const babel = require('./babel.config.js')
  93. babel.plugins.push([
  94. '@babel/plugin-transform-modules-commonjs',
  95. {
  96. loose: true,
  97. },
  98. ])
  99. const config = webpackConfig
  100. config.module.rules.push({
  101. test: /\.svg$/,
  102. type: 'asset/source',
  103. })
  104. return config
  105. },
  106. },
  107. },
  108. })