mirror of
https://github.com/cypress-io/cypress.git
synced 2026-05-13 10:58:51 -05:00
fc30118252
* Remove unused stuff * Fix eslint errors * Use local cypress running script * Fix dependency resolution * Revert "Fix dependency resolution" This reverts commit01a70be211. * Add @cypress/react CI * Properly resolve @types pacakges * Run tests with mocha * Fix cypress tests * Fix or skip some specs * Add retries to the card-spec.js * Remove jest mocks * Run e2e examples on CI * Fix yarn cache key * Fix e2e examples jobs * Rename cypress-react-unit-test with @cypress/react * Fix circleci.yml * Revert "Fix e2e examples jobs" This reverts commitefcc7c4d19. * Revert " Rename cypress-react-unit-test with @cypress/react" This reverts commit4febfcc82b. * Replce cypress-react-unit-test with @cypress/react * Persist build artifacts * Fix working directory paths circle.yml * Fix more CI * adding yarn.lock files * Make package.json for folder * Remove .npmrc * Update circle.yml * Remove unused files * Copy plugins files to the "dist" folder * Fix links to the github repos * Move init wizard from npm/react/init to npm/wizard * Move init wizard from npm/react/init to npm/wizard * Implement initial vue template * Run wizard tests on CI * Refactor continue: bool to success: bool for better code readability * Fix circleci.yml * Use only absolute paths for tests * Stub process.exit calls * Remove useless comments * Add installation cypress to the wizard logic * More improvements * Include packages/examples/cypress into git * Commit new files * Use packages/example as SST for generated files * Last improvements for wizard * Update packages/server/lib/scaffold.js * Rename wizard to create-cypress-tests * Fix circleci config * Fix snapshot tests * Run all create-cypress-tests on ci * Do not install plugins and scaffold files from kitchensink * Ignore integration/examples folder for packages/example * Run create-cypress-tests-tests on CI * Add copy example cross-platform script * Use copy example script in tests * feat: create-cypress-tests auto-inject config (#9116) * Implement the basic babel code transformation for configs * Add more tests for edge-cases * Add snapshot tests for autogenerated code for each template * Add git status guard * Add git status guard * Fix last test * Fix tests * Revert changes for packages/example * Revert changes for packages/example/tsconfig.json * Prepeare package for the release * Fix inquirer name * v0.0.125 * v0.0.127 * v0.0.128 * v0.0.130 * v0.0.131 * Add more UX features * Add vue-cli template * Make src as default folder for vue-cli template * Revert dev-time changes * Run appveyour windows build * Run full appveyour build * Fix circle.yml * Update plugins * Join paths for windows * Revert example/lib changes * Fix tests * Revert unnecessary changes * Implement dev-server dependency installation * Update npm/create-cypress-tests/README.md * Properly exit process if react tests failed * Fix circleci reporter not found * Update nextjs plugin * react-scripts plugin for dev-server * Implement webpack-file plugin support * v0.0.502 * v0.0.503 * Implement rollup support * Implement babel plugin * Update webpack options * Fix nextjs plugin * Unmount components in beforeEach to prevent side-effects * Rename preprocessor to injectDevServer * Fix next.js example * Fix webpack-options exampel * Reproduce rollup problem * Update create-cypress-tests snapshots * Do not run examples/rollup * Uncomment test * Change paralllelism * Remove useless checks * Update snapshots Co-authored-by: Jessica Sachs <jess@jessicasachs.io>
105 lines
3.3 KiB
JavaScript
105 lines
3.3 KiB
JavaScript
// @ts-check
|
|
const debug = require('debug')('@cypress/react')
|
|
const tryLoadWebpackConfig = require('../utils/tryLoadWebpackConfig')
|
|
const { getTranspileFolders } = require('../utils/get-transpile-folders')
|
|
const { addFolderToBabelLoaderTranspileInPlace } = require('../utils/babel-helpers')
|
|
|
|
/**
|
|
* Finds the ModuleScopePlugin plugin and adds given folder
|
|
* to that list. This allows react-scripts to import folders
|
|
* outside of the default "/src" folder.
|
|
* WARNING modifies the input webpack options argument.
|
|
* @see https://github.com/bahmutov/cypress-react-unit-test/issues/289
|
|
* @param {string} folderName Folder to add, should be absolute
|
|
*/
|
|
function allowModuleSourceInPlace (folderName, webpackOptions) {
|
|
if (!folderName) {
|
|
return
|
|
}
|
|
|
|
if (!webpackOptions.resolve) {
|
|
return
|
|
}
|
|
|
|
if (!Array.isArray(webpackOptions.resolve.plugins)) {
|
|
return
|
|
}
|
|
|
|
const moduleSourcePlugin = webpackOptions.resolve.plugins.find((plugin) => {
|
|
return Array.isArray(plugin.appSrcs)
|
|
})
|
|
|
|
if (!moduleSourcePlugin) {
|
|
debug('cannot find module source plugin')
|
|
|
|
return
|
|
}
|
|
|
|
debug('found module source plugin %o', moduleSourcePlugin)
|
|
if (!moduleSourcePlugin.appSrcs.includes(folderName)) {
|
|
moduleSourcePlugin.appSrcs.push(folderName)
|
|
debug('added folder %s to allowed sources', folderName)
|
|
}
|
|
}
|
|
|
|
const addCypressToWebpackEslintRulesInPlace = (webpackOptions) => {
|
|
const globalsToAdd = ['cy', 'Cypress', 'before', 'after', 'context']
|
|
|
|
if (webpackOptions.module && Array.isArray(webpackOptions.module.rules)) {
|
|
const modulePre = webpackOptions.module.rules.find(
|
|
(rule) => rule.enforce === 'pre',
|
|
)
|
|
|
|
if (modulePre && Array.isArray(modulePre.use)) {
|
|
debug('found Pre block %o', modulePre)
|
|
|
|
const useEslintLoader = modulePre.use.find(
|
|
(use) => use.loader && use.loader.includes('eslint-loader'),
|
|
)
|
|
|
|
if (useEslintLoader) {
|
|
debug('found useEslintLoader %o', useEslintLoader)
|
|
|
|
if (useEslintLoader.options) {
|
|
if (Array.isArray(useEslintLoader.options.globals)) {
|
|
debug(
|
|
'adding cy to existing globals %o',
|
|
useEslintLoader.options.globals,
|
|
)
|
|
|
|
useEslintLoader.options.globals.push(...globalsToAdd)
|
|
} else {
|
|
debug('setting new list of globals with cy and Cypress')
|
|
useEslintLoader.options.globals = globalsToAdd
|
|
}
|
|
|
|
debug('updated globals %o', useEslintLoader.options.globals)
|
|
} else {
|
|
debug('eslint loader does not have options ⚠️')
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = function findReactScriptsWebpackConfig (config) {
|
|
const webpackConfig = tryLoadWebpackConfig('react-scripts/config/webpack.config')
|
|
|
|
if (!webpackConfig) {
|
|
throw new Error('⚠️ Could not find Webpack options for react-scripts. Make sure that you have react-scripts module available.')
|
|
}
|
|
|
|
// because for react-scripts user doesn't have direct access to webpack webpackConfig
|
|
// we must implicitly inject everything required to run tests
|
|
addCypressToWebpackEslintRulesInPlace(webpackConfig)
|
|
|
|
getTranspileFolders(config).forEach((cypressFolder) => {
|
|
allowModuleSourceInPlace(cypressFolder, webpackConfig)
|
|
addFolderToBabelLoaderTranspileInPlace(cypressFolder, webpackConfig)
|
|
})
|
|
|
|
debug('resolved webpack config: %o', webpackConfig)
|
|
|
|
return webpackConfig
|
|
}
|