feat(cli): Add new timeout and file range options with enhanced logfile diff logging
This commit is contained in:
		
							
								
								
									
										128
									
								
								readme.md
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								readme.md
									
									
									
									
									
								
							| @@ -68,8 +68,11 @@ tstest "test/unit/*.ts" | ||||
| | `--verbose`, `-v` | Show all console output from tests | | ||||
| | `--no-color` | Disable colored output | | ||||
| | `--json` | Output results as JSON | | ||||
| | `--logfile` | Save detailed logs to `.nogit/testlogs/[testname].log` | | ||||
| | `--logfile` | Save detailed logs with automatic error and diff tracking | | ||||
| | `--tags <tags>` | Run only tests with specific tags (comma-separated) | | ||||
| | `--timeout <seconds>` | Timeout test files after specified seconds | | ||||
| | `--startFrom <n>` | Start running from test file number n | | ||||
| | `--stopAt <n>` | Stop running at test file number n | | ||||
|  | ||||
| ### Example Outputs | ||||
|  | ||||
| @@ -571,14 +574,88 @@ tstest "test/**/*.spec.ts" "test/**/*.test.ts" | ||||
|  | ||||
| **Important**: Always quote glob patterns to prevent shell expansion. Without quotes, the shell will expand the pattern and only pass the first matching file to tstest. | ||||
|  | ||||
| ### Automatic Logging | ||||
| ### Enhanced Test Logging | ||||
|  | ||||
| The `--logfile` option provides intelligent test logging with automatic organization: | ||||
|  | ||||
| Use `--logfile` to automatically save test output: | ||||
| ```bash | ||||
| tstest test/ --logfile | ||||
| ``` | ||||
|  | ||||
| This creates detailed logs in `.nogit/testlogs/[testname].log` for each test file. | ||||
| **Log Organization:** | ||||
| - **Current Run**: `.nogit/testlogs/[testname].log` | ||||
| - **Previous Run**: `.nogit/testlogs/previous/[testname].log` | ||||
| - **Failed Tests**: `.nogit/testlogs/00err/[testname].log` | ||||
| - **Changed Output**: `.nogit/testlogs/00diff/[testname].log` | ||||
|  | ||||
| **Features:** | ||||
| - Previous logs are automatically moved to the `previous/` folder | ||||
| - Failed tests create copies in `00err/` for quick identification | ||||
| - Tests with changed output create diff reports in `00diff/` | ||||
| - The `00err/` and `00diff/` folders are cleared on each run | ||||
|  | ||||
| **Example Diff Report:** | ||||
| ``` | ||||
| DIFF REPORT: test__api__integration.log | ||||
| Generated: 2025-05-24T01:29:13.847Z | ||||
| ================================================================================ | ||||
|  | ||||
| - [Line 8]    ✅ api test passes (150ms) | ||||
| + [Line 8]    ✅ api test passes (165ms) | ||||
|  | ||||
| ================================================================================ | ||||
| Previous version had 40 lines | ||||
| Current version has 40 lines | ||||
| ``` | ||||
|  | ||||
| ### Test Timeout Protection | ||||
|  | ||||
| Prevent runaway tests with the `--timeout` option: | ||||
|  | ||||
| ```bash | ||||
| # Timeout any test file that runs longer than 60 seconds | ||||
| tstest test/ --timeout 60 | ||||
|  | ||||
| # Shorter timeout for unit tests | ||||
| tstest test/unit/ --timeout 10 | ||||
| ``` | ||||
|  | ||||
| When a test exceeds the timeout: | ||||
| - The test process is terminated (SIGTERM) | ||||
| - The test is marked as failed | ||||
| - An error log is created in `.nogit/testlogs/00err/` | ||||
| - Clear error message shows the timeout duration | ||||
|  | ||||
| ### Test File Range Control | ||||
|  | ||||
| Run specific ranges of test files using `--startFrom` and `--stopAt`: | ||||
|  | ||||
| ```bash | ||||
| # Run tests starting from the 5th file | ||||
| tstest test/ --startFrom 5 | ||||
|  | ||||
| # Run only files 5 through 10 | ||||
| tstest test/ --startFrom 5 --stopAt 10 | ||||
|  | ||||
| # Run only the first 3 test files | ||||
| tstest test/ --stopAt 3 | ||||
| ``` | ||||
|  | ||||
| This is particularly useful for: | ||||
| - Debugging specific test failures in large test suites | ||||
| - Running tests in chunks on different CI runners | ||||
| - Quickly testing changes to specific test files | ||||
|  | ||||
| The output shows which files are skipped: | ||||
| ``` | ||||
| ⏭️  test/auth.test.ts (1/10) | ||||
|    Skipped: before start range (5) | ||||
| ⏭️  test/user.test.ts (2/10) | ||||
|    Skipped: before start range (5) | ||||
| ▶️  test/api.test.ts (5/10) | ||||
|    Runtime: node.js | ||||
|    ✅ api endpoints work (145ms) | ||||
| ``` | ||||
|  | ||||
| ### Performance Analysis | ||||
|  | ||||
| @@ -620,8 +697,51 @@ tstest test/ --json > test-results.json | ||||
| tstest test/ --quiet | ||||
| ``` | ||||
|  | ||||
| **Advanced CI Example:** | ||||
| ```bash | ||||
| # Run tests with comprehensive logging and safety features | ||||
| tstest test/ \ | ||||
|   --timeout 300 \ | ||||
|   --logfile \ | ||||
|   --json > test-results.json | ||||
|  | ||||
| # Run specific test chunks in parallel CI jobs | ||||
| tstest test/ --startFrom 1 --stopAt 10   # Job 1 | ||||
| tstest test/ --startFrom 11 --stopAt 20  # Job 2 | ||||
| tstest test/ --startFrom 21              # Job 3 | ||||
| ``` | ||||
|  | ||||
| ### Debugging Failed Tests | ||||
|  | ||||
| When tests fail, use the enhanced logging features: | ||||
|  | ||||
| ```bash | ||||
| # Run with logging to capture detailed output | ||||
| tstest test/ --logfile --verbose | ||||
|  | ||||
| # Check error logs | ||||
| ls .nogit/testlogs/00err/ | ||||
|  | ||||
| # Review diffs for flaky tests | ||||
| cat .nogit/testlogs/00diff/test__api__endpoints.log | ||||
|  | ||||
| # Re-run specific failed tests | ||||
| tstest test/api/endpoints.test.ts --verbose --timeout 60 | ||||
| ``` | ||||
|  | ||||
| ## Changelog | ||||
|  | ||||
| ### Version 1.10.0 | ||||
| - ⏱️ Added `--timeout <seconds>` option for test file timeout protection | ||||
| - 🎯 Added `--startFrom <n>` and `--stopAt <n>` options for test file range control | ||||
| - 📁 Enhanced `--logfile` with intelligent log organization: | ||||
|   - Previous logs moved to `previous/` folder | ||||
|   - Failed tests copied to `00err/` folder | ||||
|   - Changed tests create diff reports in `00diff/` folder | ||||
| - 🔍 Improved test discovery to show skipped files with clear reasons | ||||
| - 🐛 Fixed TypeScript compilation warnings and unused variables | ||||
| - 📊 Test summaries now include skipped file counts | ||||
|  | ||||
| ### Version 1.9.2 | ||||
| - 🐛 Fixed test timing display issue (removed duplicate timing in output) | ||||
| - 📝 Improved internal protocol design documentation | ||||
|   | ||||
		Reference in New Issue
	
	Block a user