This document explains the structure of the test/ directory in the Webpack project using Jest. The directory is organized into multiple folders and files, each serving a specific purpose in testing various aspects of Webpack’s functionality.
- Purpose: Stores Jest snapshot files for comparing output consistency over time.
- Usage: Used for testing UI components, serialized data, or expected module outputs.
- Purpose: Contains test cases for benchmarking Webpack's performance.
- Usage: Measures build times, memory usage, and optimization impact.
- Purpose: General test cases covering core functionalities.
- Usage: Includes unit and integration tests for various modules and features.
- Purpose: Tests related to Webpack configurations.
- Usage: Ensures that Webpack’s configuration (e.g., loaders, plugins) functions correctly.
- Purpose: Stores sample/mock data used in tests.
- Usage: Helps in creating consistent test cases with predefined inputs.
- Purpose: Utility functions and scripts to assist in testing.
- Usage: Provides reusable functions for mock data generation, cleanup, and assertions.
- Purpose: Focuses on Webpack’s Hot Module Replacement (HMR) functionality.
- Usage: Ensures live reloading and hot updates work correctly.
- Purpose: An experimental space for testing HMR features.
- Usage: Allows exploration of new HMR implementations.
- Purpose: Contains test cases related to memory limits.
- Usage: Ensures Webpack doesn’t exceed memory constraints.
- Purpose: Tests focused on Webpack’s statistical outputs.
- Usage: Verifies correct bundle sizes, dependencies, and optimizations.
- Purpose: Type-checking tests, likely for TypeScript integration.
- Usage: Ensures proper type definitions and compliance.
- Purpose: ECMAScript test262 conformance test cases.
- Usage: Git submodule — initialize with
git submodule update --init test/test262-cases. Test runner:test/test262.spectest.js.
- Purpose: Tests for Webpack’s watch mode functionality.
- Usage: Ensures file changes trigger correct rebuild behavior.
- Purpose: Contains unit tests for various functionalities.
- Usage: Ensures individual modules and functions work as expected.
- Purpose: Tests Webpack’s
BannerPluginfunctionality. - Usage: Ensures that the plugin correctly adds banners to the bundled files.
Many Webpack tests simulate small projects that are compiled during the test run.
For example, a configuration test may look like:
test/configCases/entry/simple/ index.js webpack.config.js expected.txt
Explanation:
- index.js – entry file for the test project
- webpack.config.js – configuration used by webpack
- expected.txt – expected output or snapshot comparison
During the test run, webpack compiles this project and compares the result with the expected output to ensure behavior remains consistent.
- Jest is used for running tests.
- Snapshots help maintain consistency in output.
- Unit tests verify individual module functionality.
- Integration tests ensure multiple components work together.
To execute all tests:
yarn testChoose test command based on modified directory:
| Modified directory/file | Command |
|---|---|
test/*.unittest.js |
yarn test:base -- --testPathPatterns="<filename>" |
test/cases/ |
yarn test:basic |
test/configCases/ |
yarn test:basic -- --testPathPatterns="ConfigTestCases" |
test/statsCases/ |
yarn test:basic -- --testPathPatterns="StatsTestCases" |
test/watchCases/ |
yarn test:base -- --testPathPatterns="WatchTestCases" |
test/hotCases/ |
yarn test:base -- --testPathPatterns="HotTestCases" |
test/benchmarkCases/ |
FILTER="<case-name>" yarn benchmark |
test/test262-cases/ |
yarn test:test262 (requires git submodule update --init test/test262-cases first) |
Running a single test case with --testNamePattern. The test name format is <category> <case-name> (e.g., css basic, asset url):
yarn test:basic -- --testPathPatterns="ConfigTestCases" --testNamePattern="css basic"Multiple patterns can be combined with |:
yarn test:basic -- --testPathPatterns="ConfigTestCases" --testNamePattern="css basic|css url"- Add new test cases in the appropriate folder.
- Use Jest assertions and mocks for consistency.
- Run
yarn testbefore pushing changes to validate functionality.