Files
Pake/tests
2025-08-14 20:51:42 +08:00
..
2025-08-14 11:20:15 +08:00
2025-08-14 11:20:15 +08:00
2025-08-14 20:51:42 +08:00
2025-08-14 20:51:42 +08:00
2025-08-14 11:20:15 +08:00
2025-08-14 11:20:15 +08:00
2025-08-14 11:20:15 +08:00

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 checks
  • claude-unified.yml - Claude AI integration for code review and assistance
  • release.yml - Handles releases, app building, and Docker publishing
  • pake-cli.yaml - Manual CLI building workflow
  • pake_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

  1. "CLI file not found"

    npm run cli:build
    
  2. "Permission denied"

    chmod +x tests/index.js
    
  3. "Timeout errors"

    • Increase timeout in test.config.js
    • Check system resources

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:

  1. Add unit tests for new functions
  2. Add integration tests for new workflows
  3. Update manual test scenarios
  4. Run full test suite before submitting
# Pre-commit test routine
npm run cli:build
npm test
npm run test:build