mirror of
https://git.datalinker.icu/ltdrdata/ComfyUI-Manager
synced 2025-12-09 06:04:31 +08:00
- Add MockTaskQueue class with dependency injection for isolated testing - Test core operations: queueing, processing, batch tracking, state management - Test thread safety: concurrent access, worker lifecycle, exception handling - Test integration workflows: full task processing with WebSocket updates - Test edge cases: empty queues, invalid data, cleanup scenarios - Solve heapq compatibility by wrapping items in priority tuples - Include pytest configuration and test runner script - All 15 tests passing with proper async/threading support Testing covers: ✅ Task queueing with Pydantic validation ✅ Batch history tracking and persistence ✅ Thread-safe concurrent operations ✅ Worker thread lifecycle management ✅ WebSocket message delivery tracking ✅ State snapshots and error conditions
2.6 KiB
2.6 KiB
ComfyUI-Manager Tests
This directory contains unit tests for ComfyUI-Manager components.
Running Tests
Using the Virtual Environment
# From the project root
/path/to/comfyui/.venv/bin/python -m pytest tests/ -v
Using the Test Runner
# Run all tests
python run_tests.py
# Run specific tests
python run_tests.py -k test_task_queue
# Run with coverage
python run_tests.py --cov
Test Structure
test_task_queue.py
Comprehensive tests for the TaskQueue functionality including:
- Basic Operations: Initialization, adding/removing tasks, state management
- Batch Tracking: Automatic batch creation, history saving, finalization
- Thread Safety: Concurrent access, worker lifecycle management
- Integration Testing: Full task processing workflow
- Edge Cases: Empty queues, invalid data, exception handling
Key Features Tested:
- ✅ Task queueing with Pydantic model validation
- ✅ Batch history tracking and persistence
- ✅ Thread-safe concurrent operations
- ✅ Worker thread lifecycle management
- ✅ WebSocket message tracking
- ✅ State snapshots and transitions
MockTaskQueue
The tests use a MockTaskQueue class that:
- Isolates testing from global state and external dependencies
- Provides dependency injection for mocking external services
- Maintains the same API as the real TaskQueue
- Supports both synchronous and asynchronous testing patterns
Test Categories
- Unit Tests: Individual method testing with mocked dependencies
- Integration Tests: Full workflow testing with real threading
- Concurrency Tests: Multi-threaded access verification
- Edge Case Tests: Error conditions and boundary cases
Dependencies
Tests require:
pytest- Test frameworkpytest-asyncio- Async test supportpydantic- Data model validation
Install with: pip install -e ".[dev]"
Design Notes
Handling Singleton Pattern
The real TaskQueue uses a singleton pattern which makes testing challenging. The MockTaskQueue avoids this by:
- Not setting global instance variables
- Creating fresh instances per test
- Providing controlled dependency injection
Thread Management
Tests handle threading complexities by:
- Using controlled mock workers for predictable behavior
- Providing synchronization primitives for timing-sensitive tests
- Testing both successful workflows and exception scenarios
Heapq Compatibility
The original TaskQueue uses heapq with Pydantic models, which don't support comparison by default. Tests solve this by wrapping items in comparable tuples with priority values, maintaining FIFO order while enabling heap operations.