8.5 KiB
8.5 KiB
Test Runner Issue Fixed - Summary
Problem
Tests were organized into feature directories and configured to run with Mocha, but they showed "0 passing" because:
- Test files are standalone Node.js scripts (not Mocha format)
- Tests don't have
describe()orit()blocks - Mocha couldn't find any test cases to run
Root Cause
The existing tests are integration test scripts that:
- Run procedurally from top to bottom
- Use
process.exit(0)for success,process.exit(1)for failure - Print their own test output
- Were designed to be run directly with
node, not through Mocha
Solution
Updated the test runner (tests/run_all_tests.js) to:
- Spawn separate Node.js processes for each test (instead of
require()) - Capture exit codes: 0 = pass, non-zero = fail
- Report pass/fail results with duration tracking
- Show test summaries with clear pass/fail counts
What Changed
Updated Files
tests/run_all_tests.js
- Changed from
require(testFile)tospawn('node', [testFile]) - Added exit code tracking (0 = PASSED, non-zero = FAILED)
- Added verbose mode support (
--verbose) - Added stop-on-failure support (
--bail) - Shows test duration for each test
- Shows output preview for failed tests
package.json
- Updated all test:* scripts to use the custom test runner
- Added
test:verbosefor detailed output - Added
test:bailto stop on first failure - Added
test:filefor running specific patterns
New Documentation
docs/TEST_RUNNER_GUIDE.md
Complete guide covering:
- How to run tests (all, by category, single file)
- Test output format and interpretation
- Understanding pass/fail results
- Debugging failing tests
- Best practices for writing tests
- Environment configuration
How to Use
Run All Tests
npm run test:all
Run Tests by Category
npm run test:promo # Promotion/coupon tests (13 files)
npm run test:satloc # SatLoc partner tests (13 files)
npm run test:job # Job processing tests (9 files)
npm run test:payment # Payment & billing tests (4 files)
npm run test:dlq # DLQ management tests (3 files)
npm run test:parsing # Log parsing tests (7 files)
npm run test:integration # Integration tests (2 files)
npm run test:utils # Utility tests (9 files)
Run Single Test
npm run test:single tests/promo/test_promo_details.js
Run with Options
npm run test:verbose # Show all test output
npm run test:bail # Stop on first failure
Test Results
Example: DLQ Tests
$ npm run test:dlq
═══════════════════════════════════════════════════════
🧪 AgMission Test Runner
═══════════════════════════════════════════════════════
📁 Environment: ./environment.env
🔍 Pattern: dlq/test_*.js
═══════════════════════════════════════════════════════
📋 Found 3 test files:
1. tests/dlq/test_dlq_messages_direct.js
2. tests/dlq/test_dlq_mgmt_api.js
3. tests/dlq/test_dlq_routes.js
────────────────────────────────────────────────────────────
🧪 Running: tests/dlq/test_dlq_messages_direct.js
────────────────────────────────────────────────────────────
✅ PASSED: test_dlq_messages_direct.js (912ms)
────────────────────────────────────────────────────────────
🧪 Running: tests/dlq/test_dlq_mgmt_api.js
────────────────────────────────────────────────────────────
✅ PASSED: test_dlq_mgmt_api.js (530ms)
────────────────────────────────────────────────────────────
🧪 Running: tests/dlq/test_dlq_routes.js
────────────────────────────────────────────────────────────
❌ FAILED: test_dlq_routes.js (624ms)
Exit code: 1
═══════════════════════════════════════════════════════
📊 TEST SUMMARY
═══════════════════════════════════════════════════════
✅ Passed: 2/3
❌ Failed: 1/3
⏱️ Total Duration: 2.07s
❌ FAILED TESTS:
1. test_dlq_routes.js - Exit code: 1
═══════════════════════════════════════════════════════
Example: Payment Tests
$ npm run test:payment
Found 4 test files
✅ PASSED: test_multi_subscription_auth.js (10282ms)
❌ FAILED: test_payment_failure_handling.js (15004ms)
✅ PASSED: test_payment_verification_fix.js (29ms)
✅ PASSED: test_setup_intent.js (3639ms)
═══════════════════════════════════════════════════════
📊 TEST SUMMARY
═══════════════════════════════════════════════════════
✅ Passed: 3/4
❌ Failed: 1/4
⏱️ Total Duration: 28.95s
Example: Promo Tests
$ npm run test:promo
Found 13 test files
✅ PASSED: 10 tests
❌ FAILED: 3 tests
⏱️ Total Duration: 72.00s
❌ FAILED TESTS:
1. test_forever_coupon_validation.js - Exit code: 1
2. test_promo_enhancements.js - Exit code: 1
3. test_promo_expiry_workflow.js - Exit code: 1
Key Features
✅ Pass/Fail Reporting
- Clear ✅ PASSED or ❌ FAILED for each test
- Exit code 0 = success, non-zero = failure
- Summary shows total passed/failed counts
⏱️ Duration Tracking
- Individual test duration in milliseconds
- Total test suite duration in seconds
- Helps identify slow tests
📊 Test Summaries
- Total tests run
- Pass/fail counts with fractions (e.g., "2/3")
- List of failed tests for quick reference
🛑 Stop on Failure
- Use
--bailto stop after first failure - Faster failure detection during development
📢 Verbose Mode
- Use
--verboseto see all test output - Default: only shows output for failed tests
- Reduces noise while debugging
🎯 Pattern Matching
- Run specific test patterns
- Flexible glob patterns for test selection
Benefits
- No Code Changes: Tests work as-is, no rewriting needed
- Clear Results: Know exactly which tests pass/fail
- Fast Debugging: Failed tests show error previews
- Organized Execution: Run by category or all at once
- Duration Metrics: Identify slow or problematic tests
- Isolated Execution: Each test runs in separate process
Test Structure
These are integration tests that:
- Connect to real MongoDB, Redis, RabbitMQ
- Call external APIs (Stripe, partner APIs)
- Test end-to-end workflows
- Require services to be running
Not traditional unit tests with mocks.
Next Steps
For Users
- Run
npm run test:allto see overall test status - Focus on categories:
npm run test:promo,npm run test:payment, etc. - Debug failures with
--verboseflag - Run single tests directly when debugging
For Development
- Keep writing tests as standalone scripts
- Use unique identifiers to avoid conflicts
- Clean up only resources you create
- Return proper exit codes (0 = pass, 1 = fail)
- Handle rate limits with delays
Documentation
- TEST_RUNNER_GUIDE.md: Complete usage guide
- TESTS_ORGANIZED.md: Migration details
- TEST_COMMANDS.md: Quick command reference
Verification
All test categories tested and working:
- ✅ DLQ tests (2/3 passing)
- ✅ Payment tests (3/4 passing)
- ✅ Promo tests (10/13 passing)
- ✅ Other categories organized and executable
Result: Tests now report actual pass/fail results instead of "0 passing"! 🎉