-
-
Notifications
You must be signed in to change notification settings - Fork 103
Add comprehensive unit tests for rspack exports #847
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
WalkthroughAdds a new test suite at Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Pull Request ReviewSummaryThis PR adds comprehensive Jest unit tests for the rspack public API exports, addressing issue #844. Overall, this is a high-quality contribution that significantly improves test coverage for the rspack functionality. ✅ Strengths
🔍 Code Quality ObservationsMinor Issues
🧪 Test Coverage AnalysisAll critical functionality is tested:
Test Coverage vs Source CodeComparing with
🔒 Security ConsiderationsNo security concerns identified. The tests:
⚡ Performance Considerations
📝 Best Practices
🐛 Potential IssuesLow Priority
📋 Action ItemsRequired before merge:
Optional improvements (could be follow-up PRs):
✅ RecommendationAPPROVE with minor fix required: This is an excellent addition to the test suite. Once the trailing newline is added, this should be merged. The tests are well-structured, comprehensive, and directly address the issues mentioned in #844 and help prevent regressions of #843. 🤖 Generated with Claude Code |
Code Review - PR #847: Add comprehensive unit tests for rspack exportsThank you for this excellent contribution! The test coverage for the rspack public API is much needed and well-implemented. Here's my detailed feedback: ✅ Strengths
🔍 Issues & Concerns1. Missing Trailing Newline
|
8dc7231 to
a243a39
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In @test/package/rspack/index.test.js:
- Around line 89-100: The immutability test for generateRspackConfig is
asserting the wrong value after mutating rspackConfig1.output.path: it sets
rspackConfig1.output.path = "new path" but then checks rspackConfig2.output.path
is not "new value"; update the assertion to check rspackConfig2.output.path is
not "new path" (or change the mutated value to "new value" so assertions match)
so the test actually verifies that modifying rspackConfig1 does not affect
rspackConfig2; locate generateRspackConfig and the rspackConfig1/rspackConfig2
variables in the test and make the assertion consistent.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
test/package/rspack/index.test.js
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
Repo: shakacode/shakapacker PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-22T04:44:25.430Z
Learning: This gem supports both webpack and rspack configurations - test changes with both bundlers when modifying core functionality
📚 Learning: 2025-12-22T04:44:25.430Z
Learnt from: CR
Repo: shakacode/shakapacker PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-22T04:44:25.430Z
Learning: This gem supports both webpack and rspack configurations - test changes with both bundlers when modifying core functionality
Applied to files:
test/package/rspack/index.test.js
📚 Learning: 2024-10-09T10:47:17.620Z
Learnt from: marvinthepa
Repo: shakacode/shakapacker PR: 520
File: spec/shakapacker/utils_manager_spec.rb:68-89
Timestamp: 2024-10-09T10:47:17.620Z
Learning: In `spec/shakapacker/utils_manager_spec.rb`, the code within the context `"when lockfile is in Rails.root, but pwd is different"` is not duplicated for each package manager.
Applied to files:
test/package/rspack/index.test.js
🧬 Code graph analysis (1)
test/package/rspack/index.test.js (2)
test/helpers.js (2)
chdirTestApp(43-49)resetEnv(53-55)package/rspack/index.ts (1)
generateRspackConfig(66-66)
🔇 Additional comments (4)
test/package/rspack/index.test.js (4)
1-26: LGTM! Clean mocking setup.The mocking strategy appropriately isolates the rspack functionality by:
- Mocking
moduleExiststo return false, avoiding external dependency checks- Mocking
validateRspackDependenciesto skip validation during testsThis follows best practices for unit testing by eliminating external dependencies.
27-34: LGTM! Proper test suite setup.The setup correctly:
- Resets modules and environment between tests for isolation
- Sets
SHAKAPACKER_ASSETS_BUNDLER=rspackto exercise rspack-specific code paths (as mentioned in PR objectives)- Restores the original directory after all tests
35-87: LGTM! Comprehensive export validation.The tests systematically verify all expected exports from the rspack index module:
- Webpack-merge functions (merge, mergeWithRules, mergeWithCustomize, unique)
- Configuration objects (config, devServer, env, rules, baseConfig)
- Utility functions (moduleExists, canProcess, inliningCss)
- generateRspackConfig function
The baseConfig validation at lines 73-74 is particularly valuable as it checks for required properties (output, resolve), helping catch regressions like issue #843 mentioned in the PR objectives.
102-189: LGTM! Comprehensive behavior validation.The remaining tests thoroughly validate
generateRspackConfigbehavior:
- Config merging with proper assertions for nested properties (lines 102-115)
- Error handling for invalid inputs (lines 117-123)
- Structural requirements: plugins, optimization, and module.rules (lines 125-151)
- Environment-specific behavior with proper module reloading via
jest.resetModules()(lines 153-189)The tests correctly use
jest.resetModules()when changingNODE_ENVto ensure the module is re-imported with the new environment variables, which is essential for accurate testing.
a243a39 to
93de109
Compare
Code Review - PR #847I've reviewed the comprehensive unit tests for rspack exports. Overall, this is a solid addition that significantly improves test coverage for the rspack public API. Here's my detailed feedback: ✅ Strengths1. Excellent Test Coverage
2. Follows Existing Patterns
3. Proper Test Isolation
4. Good Mock Design
🔍 Issues & SuggestionsCritical Issue: Missing Trailing NewlineLocation: The file must end with a trailing newline character per the project's linting rules (see CLAUDE.md). This will fail Fix: Add a blank line at the end of the file. Minor Issues1. Inconsistent Assertion in Line 29Location: expect(webpackConfig2.output.path).not.toBe("new value") Should be webpackConfig1.output.path = "new path"This is copying the same typo from 2. Test Description ClarityLocation: Multiple tests (lines 34, 49, 61, 67) Some test descriptions use generic terms:
These are minor readability improvements, not critical issues. 3. Environment Test Could Be More SpecificLocation: The production mode test verifies the mode is set to "production", but it might be more robust to also check for production-specific optimizations (minification settings, etc.) to ensure the production environment config is actually being used. Suggestion: test("generateRspackConfig respects NODE_ENV for environment config", () => {
process.env.NODE_ENV = "production"
jest.resetModules()
const { generateRspackConfig } = require("../../../package/rspack/index")
const rspackConfig = generateRspackConfig()
expect(rspackConfig).toHaveProperty("mode", "production")
// Also verify production-specific config is applied
expect(rspackConfig.optimization).toBeDefined()
})4. Missing Test: Actual baseConfig Export VerificationLocation: Given that issue #843 specifically mentions Suggestion: Add assertions to verify it contains expected base configuration properties: test("exports baseConfig object", () => {
const rspack = require("../../../package/rspack/index")
expect(rspack.baseConfig).toBeDefined()
expect(typeof rspack.baseConfig).toBe("object")
expect(rspack.baseConfig).toHaveProperty("output")
expect(rspack.baseConfig).toHaveProperty("resolve")
// Verify critical base properties exist
expect(rspack.baseConfig.output).toHaveProperty("path")
expect(rspack.baseConfig.output).toHaveProperty("publicPath")
expect(rspack.baseConfig.resolve).toHaveProperty("extensions")
})🎯 Performance ConsiderationsNo performance concerns. The tests are lightweight and properly isolated. 🔒 Security ConcernsNone. This is test code with no security implications. 📋 Test RecommendationsBefore Merging:
Future Enhancements (Optional):
📊 SummaryRecommendation: ✅ Approve with minor fixes This PR successfully addresses issue #844 by providing comprehensive test coverage for the rspack public API. The code quality is high, follows project conventions, and uses appropriate testing patterns. Required Changes:
Suggested Changes:
Great work on the thorough test coverage! This will help catch regressions and ensure the rspack integration remains stable. |
Addresses issue #844 by adding Jest unit tests for the rspack public API. These tests verify all exports from package/rspack/index.ts work correctly. Tests cover: - Webpack-merge function exports (merge, mergeWithRules, etc.) - Configuration object exports (config, devServer, env, rules, baseConfig) - Utility function exports (moduleExists, canProcess, inliningCss) - generateRspackConfig() behavior: - Returns immutable config objects - Properly merges extra configuration - Validates input arguments - Includes required plugins and optimization - Respects NODE_ENV for environment-specific configs - Falls back to base config for unknown environments - Merges environment and extra configs correctly The baseConfig export is verified to be a valid rspack configuration object, which helps catch issues like those reported in #843. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
93de109 to
e7d612c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In `@test/package/rspack/index.test.js`:
- Line 190: Add a trailing newline at the end of
test/package/rspack/index.test.js by ensuring there's a newline character after
the final closing characters "})" (the end of the test block) so the file ends
with a single newline; simply edit the file and insert a newline at EOF and
save.
🧹 Nitpick comments (1)
test/package/rspack/index.test.js (1)
153-175: Consider asserting more than justmodefor the production config, and more than non-throwing for the fallback.These tests work but are relatively shallow. For the production test (line 160), you might also verify that production-specific settings (e.g., minimizer enabled) are present. For the fallback test (lines 170-174), calling
generateRspackConfig()twice (once to assert no-throw, once to capture the result) is redundant — you could capture and assert in one call.♻️ Minor simplification for the fallback test
- // Should not throw, should use baseConfig - expect(() => generateRspackConfig()).not.toThrow() - - const rspackConfig = generateRspackConfig() + // Should not throw, should use baseConfig + const rspackConfig = generateRspackConfig() expect(rspackConfig).toHaveProperty("output") expect(rspackConfig).toHaveProperty("resolve")
| expect(rspackConfig).toHaveProperty("devtool", "custom-source-map") | ||
| expect(rspackConfig).toHaveProperty("mode", "development") | ||
| }) | ||
| }) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add a trailing newline at end of file.
The file should end with a trailing newline character. As per coding guidelines, all files must end with a trailing newline.
🤖 Prompt for AI Agents
In `@test/package/rspack/index.test.js` at line 190, Add a trailing newline at the
end of test/package/rspack/index.test.js by ensuring there's a newline character
after the final closing characters "})" (the end of the test block) so the file
ends with a single newline; simply edit the file and insert a newline at EOF and
save.
Summary
Addresses #844 by adding comprehensive Jest unit tests for the rspack public API exports in
package/rspack/index.ts.What was tested
All 17 tests pass and verify:
✅ Webpack-merge function exports - merge, mergeWithRules, mergeWithCustomize, unique
✅ Configuration object exports - config, devServer, env, rules, baseConfig
✅ Utility function exports - moduleExists, canProcess, inliningCss
✅ generateRspackConfig() behavior:
Key improvements
validateRspackDependencies()to avoid requiring actual rspack dependencies during test runsSHAKAPACKER_ASSETS_BUNDLER=rspackto ensure rspack-specific code paths are testedTest file location
test/package/rspack/index.test.js- mirrors the structure of existingtest/package/index.test.jsfor webpackTest plan
🤖 Generated with Claude Code
Summary by CodeRabbit