5.8 KiB
5.8 KiB
Pake CLI Test Suite
This directory contains the complete test suite for the Pake CLI tool.
Quick Start
# Run all tests (unit + integration + builder)
npm test
Test Structure
tests/
├── index.js # Main test runner
├── cli.test.js # Unit tests for CLI functionality
├── integration.test.js # Integration tests
├── builder.test.js # Platform-specific builder tests
├── test.config.js # Shared test configuration
└── README.md # This file
Test Categories
1. Unit Tests (cli.test.js)
Fast tests that verify individual CLI functions:
- ✅ Version command
- ✅ Help command
- ✅ Argument validation
- ✅ URL validation (including weekly.tw93.fun)
- ✅ Number validation
- ✅ Dependency checks
- ✅ Response time
- ✅ Remote icon URL validation
- ✅ Configuration merging logic
2. Integration Tests (integration.test.js)
Tests that verify components work together:
- ✅ Process spawning
- ✅ Interactive mode
- ✅ Build command construction
- ✅ File system permissions
- ✅ Dependency resolution
3. Builder Tests (builder.test.js)
Platform-specific builder logic tests:
- ✅ Mac file naming patterns
- ✅ Windows file naming patterns
- ✅ Linux file naming patterns (deb/rpm/AppImage)
- ✅ Architecture detection logic
- ✅ Multi-arch build detection
- ✅ Target format validation
All tests run automatically with: npm test
Test Commands
| Command | Description | Coverage | Duration |
|---|---|---|---|
npm test |
Run all automated tests | Unit + Integration + Builder | ~30 seconds |
npm run cli:build |
Build CLI for testing | Development setup | ~5 seconds |
GitHub Actions Integration:
- Automated testing on push/PR to main/dev branches
- Multi-platform testing (Ubuntu, Windows, macOS)
- Quality checks and code formatting validation
Manual Testing Scenarios
Basic Usage
# Test basic app creation with weekly.tw93.fun
node dist/cli.js https://weekly.tw93.fun --name "Weekly"
# Test with custom dimensions
node dist/cli.js https://weekly.tw93.fun --name "Weekly" --width 1200 --height 800
# Test debug mode
node dist/cli.js https://weekly.tw93.fun --name "DebugApp" --debug
Advanced Features
# Test with remote CDN icon
node dist/cli.js https://weekly.tw93.fun --name "IconWeekly" --icon "https://gw.alipayobjects.com/os/k/fw/weekly.icns"
# Test with injection files (create test files first)
echo "body { background: red; }" > test.css
echo "console.log('injected');" > test.js
node dist/cli.js https://weekly.tw93.fun --name "InjectionApp" --inject ./test.css,./test.js
# Test fullscreen app
node dist/cli.js https://weekly.tw93.fun --name "FullWeekly" --fullscreen
# Test system tray integration
node dist/cli.js https://weekly.tw93.fun --name "TrayWeekly" --show-system-tray
Platform-Specific (macOS)
# Test universal binary
node dist/cli.js https://weekly.tw93.fun --name "Weekly" --multi-arch
# Test hidden title bar
node dist/cli.js https://weekly.tw93.fun --name "ImmersiveWeekly" --hide-title-bar
# Test dark mode
node dist/cli.js https://weekly.tw93.fun --name "DarkWeekly" --dark-mode
Test Configuration
Tests use configuration from test.config.js:
export const TIMEOUTS = {
QUICK: 3000, // Quick commands
MEDIUM: 10000, // Validation tests
LONG: 300000, // Build tests
};
export const TEST_URLS = {
WEEKLY: "https://weekly.tw93.fun",
VALID: "https://example.com",
GITHUB: "https://github.com",
INVALID: "not://a/valid[url]",
};
export const TEST_ASSETS = {
WEEKLY_ICNS: "https://gw.alipayobjects.com/os/k/fw/weekly.icns",
};
Adding New Tests
Unit Test
// In cli.test.js
runner.addTest(
"My New Test",
() => {
// Test logic here
return true; // or false
},
"Test description",
);
Integration Test
// In integration.test.js
runner.addTest(
"My Integration Test",
async () => {
// Async test logic
return await someAsyncOperation();
},
TIMEOUTS.MEDIUM,
);
Continuous Integration
The project uses simplified GitHub Actions workflows:
Current Workflows:
quality-and-test.yml- Runs all tests, code formatting, and Rust quality checksclaude-unified.yml- Claude AI integration for code review and assistancerelease.yml- Handles releases, app building, and Docker publishingpake-cli.yaml- Manual CLI building workflowpake_build_single_app.yaml- Reusable single app building workflow
Integration Example:
# Automatic testing on push/PR
- name: Run Quality & Tests
run: npm test
# Manual CLI building
- name: Build CLI
run: npm run cli:build
Troubleshooting
Common Issues
-
"CLI file not found"
npm run cli:build -
"Permission denied"
chmod +x tests/index.js -
"Timeout errors"
- Increase timeout in
test.config.js - Check system resources
- Increase timeout in
Debug Mode
Run tests with debug output:
DEBUG=1 npm test
Performance Expectations
| Platform | First Build | Subsequent | Memory |
|---|---|---|---|
| M1 Mac | 2-3 min | 30-45s | ~200MB |
| Intel Mac | 3-4 min | 45-60s | ~250MB |
| Linux | 4-5 min | 60-90s | ~300MB |
| Windows | 5-6 min | 90-120s | ~350MB |
Contributing
When adding new features:
- Add unit tests for new functions
- Add integration tests for new workflows
- Update manual test scenarios
- Run full test suite before submitting
# Pre-commit test routine
npm run cli:build
npm test
npm run test:build