What is @cypress/webpack-dev-server?
@cypress/webpack-dev-server is a utility that allows you to use Webpack as the dev server for Cypress component testing. It integrates Webpack with Cypress to enable seamless testing of components in a development-like environment.
What are @cypress/webpack-dev-server's main functionalities?
Integration with Cypress
This feature allows you to integrate Webpack with Cypress. The code sample demonstrates how to configure Cypress to use Webpack as its dev server by providing the necessary Webpack configuration.
const { startDevServer } = require('@cypress/webpack-dev-server');
const webpackConfig = require('./webpack.config');
module.exports = (on, config) => {
on('dev-server:start', (options) =>
startDevServer({ options, webpackConfig })
);
return config;
};
Custom Webpack Configuration
This feature allows you to use a custom Webpack configuration for your Cypress tests. The code sample shows how to pass a custom Webpack configuration to the `startDevServer` function.
const { startDevServer } = require('@cypress/webpack-dev-server');
const customWebpackConfig = {
// custom webpack configuration
};
module.exports = (on, config) => {
on('dev-server:start', (options) =>
startDevServer({ options, webpackConfig: customWebpackConfig })
);
return config;
};
Hot Module Replacement (HMR)
This feature enables Hot Module Replacement (HMR) for faster development. The code sample demonstrates how to configure HMR in the Webpack configuration used by Cypress.
const { startDevServer } = require('@cypress/webpack-dev-server');
const webpackConfig = require('./webpack.config');
webpackConfig.devServer = {
hot: true,
};
module.exports = (on, config) => {
on('dev-server:start', (options) =>
startDevServer({ options, webpackConfig })
);
return config;
};
Other packages similar to @cypress/webpack-dev-server
cypress-react-unit-test
cypress-react-unit-test is a package specifically designed for testing React components with Cypress. It provides a similar integration with Webpack but is tailored for React, making it easier to set up and use for React projects.
cypress-vue-unit-test
cypress-vue-unit-test is a package for testing Vue components with Cypress. Like @cypress/webpack-dev-server, it integrates Webpack with Cypress but is optimized for Vue.js, providing a more streamlined experience for Vue developers.
@cypress/webpack-dev-server
Implements the APIs for the object-syntax of the Cypress Component-testing "webpack dev server".
Note: This package is bundled with the Cypress binary and should not need to be installed separately. See the Component Framework Configuration Docs for setting up component testing with webpack. The devServer
function signature is for advanced use-cases.
Object API:
import { defineConfig } from 'cypress'
export default defineConfig({
component: {
devServer: {
framework: 'create-react-app',
bundler: 'webpack',
}
}
})
Function API:
import { devServer } from '@cypress/webpack-dev-server'
import { defineConfig } from 'cypress'
export default defineConfig({
component: {
devServer(devServerConfig) {
return devServer({
...devServerConfig,
framework: 'create-react-app',
webpackConfig: require('./webpack.config.js')
})
}
}
})
Testing
Unit tests can be run with yarn test
. Integration tests can be run with yarn cypress:run
This module should be primarily covered by system-tests / open-mode tests. All system-tests directories should be created using the notation:
webpack${major}_wds${devServerMajor}-$framework{-$variant}
- webpack4_wds3-react
- webpack5_wds5-react
- webpack4_wds4-next-11
- webpack5_wds3-next-12
- webpack4_wds4-create-react-app
Architecture
There should be a single publicly-exported entrypoint for the module, devServer
, all other types and functions should be considered internal/implementation details, and types stripped from the output.
The devServer
will first source the modules from the user's project, falling back to our own bundled versions of libraries. This ensures that the user has installed the current modules, and throws an error if the user does not have the library installed.
From there, we check the "framework" field to source or define any known webpack transforms to aid in the compilation.
We then merge the sourced config with the user's webpack config, and layer on our own transforms, and provide this to a webpack instance. The webpack instance used to create a webpack-dev-server, which is returned.
Compatibility
@cypress/webpack-dev-server | cypress |
---|
<= v1 | <= v9 |
>= v2 | >= v10 |
>= v4 | >= v13 |
License
This project is licensed under the terms of the MIT license.