feat(watch mode): Add watch mode support with CLI options and enhanced documentation
This commit is contained in:
137
readme.md
137
readme.md
@@ -27,6 +27,12 @@
|
||||
- 🔁 **Retry Logic** - Automatically retry failing tests
|
||||
- 🛠️ **Test Fixtures** - Create reusable test data
|
||||
- 📦 **Browser-Compatible** - Full browser support with embedded tapbundle
|
||||
- 👀 **Watch Mode** - Automatically re-run tests on file changes
|
||||
- 📊 **Real-time Progress** - Live test execution progress updates
|
||||
- 🎨 **Visual Diffs** - Beautiful side-by-side diffs for failed assertions
|
||||
- 🔄 **Event-based Reporting** - Real-time test lifecycle events
|
||||
- ⚙️ **Test Configuration** - Flexible test settings with .tstest.json files
|
||||
- 🚀 **Protocol V2** - Enhanced TAP protocol with Unicode delimiters
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -73,6 +79,9 @@ tstest "test/unit/*.ts"
|
||||
| `--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 |
|
||||
| `--watch`, `-w` | Watch for file changes and re-run tests |
|
||||
| `--watch-ignore <patterns>` | Ignore patterns in watch mode (comma-separated) |
|
||||
| `--only` | Run only tests marked with .only |
|
||||
|
||||
### Example Outputs
|
||||
|
||||
@@ -203,9 +212,9 @@ tap.only.test('focus on this', async () => {
|
||||
// Only this test will run
|
||||
});
|
||||
|
||||
// Todo test
|
||||
tap.todo('implement later', async () => {
|
||||
// Marked as todo
|
||||
// Todo test - creates actual test object marked as todo
|
||||
tap.todo.test('implement later', async () => {
|
||||
// This test will be counted but marked as todo
|
||||
});
|
||||
|
||||
// Chaining modifiers
|
||||
@@ -558,6 +567,115 @@ tapWrap.tap.test('wrapped test', async () => {
|
||||
|
||||
## Advanced Features
|
||||
|
||||
### Watch Mode
|
||||
|
||||
Automatically re-run tests when files change:
|
||||
|
||||
```bash
|
||||
# Watch all files in the project
|
||||
tstest test/ --watch
|
||||
|
||||
# Watch with custom ignore patterns
|
||||
tstest test/ --watch --watch-ignore "dist/**,coverage/**"
|
||||
|
||||
# Short form
|
||||
tstest test/ -w
|
||||
```
|
||||
|
||||
**Features:**
|
||||
- 👀 Shows which files triggered the re-run
|
||||
- ⏱️ 300ms debouncing to batch rapid changes
|
||||
- 🔄 Clears console between runs for clean output
|
||||
- 📁 Intelligently ignores common non-source files
|
||||
|
||||
### Real-time Test Progress
|
||||
|
||||
tstest provides real-time updates during test execution:
|
||||
|
||||
```
|
||||
▶️ test/api.test.ts (1/4)
|
||||
Runtime: node.js
|
||||
⏳ Running: api endpoint validation...
|
||||
✅ api endpoint validation (145ms)
|
||||
⏳ Running: error handling...
|
||||
✅ error handling (23ms)
|
||||
Summary: 2/2 PASSED
|
||||
```
|
||||
|
||||
### Visual Diffs for Failed Assertions
|
||||
|
||||
When assertions fail, tstest shows beautiful side-by-side diffs:
|
||||
|
||||
```
|
||||
❌ should return correct user data
|
||||
|
||||
String Diff:
|
||||
- Expected
|
||||
+ Received
|
||||
|
||||
- Hello World
|
||||
+ Hello Universe
|
||||
|
||||
Object Diff:
|
||||
{
|
||||
name: "John",
|
||||
- age: 30,
|
||||
+ age: 31,
|
||||
email: "john@example.com"
|
||||
}
|
||||
```
|
||||
|
||||
### Test Configuration (.tstest.json)
|
||||
|
||||
Configure test behavior with `.tstest.json` files:
|
||||
|
||||
```json
|
||||
{
|
||||
"timeout": 30000,
|
||||
"retries": 2,
|
||||
"bail": false,
|
||||
"parallel": true,
|
||||
"tags": ["unit", "fast"],
|
||||
"env": {
|
||||
"NODE_ENV": "test"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Configuration files are discovered in:
|
||||
1. Test file directory
|
||||
2. Parent directories (up to project root)
|
||||
3. Project root
|
||||
4. Home directory (`~/.tstest.json`)
|
||||
|
||||
Settings cascade and merge, with closer files taking precedence.
|
||||
|
||||
### Event-based Test Reporting
|
||||
|
||||
tstest emits detailed events during test execution for integration with CI/CD tools:
|
||||
|
||||
```json
|
||||
{"event":"suite:started","file":"test/api.test.ts","timestamp":"2025-05-26T10:30:00.000Z"}
|
||||
{"event":"test:started","name":"api endpoint validation","timestamp":"2025-05-26T10:30:00.100Z"}
|
||||
{"event":"test:progress","name":"api endpoint validation","message":"Validating response schema"}
|
||||
{"event":"test:completed","name":"api endpoint validation","passed":true,"duration":145}
|
||||
{"event":"suite:completed","file":"test/api.test.ts","passed":true,"total":2,"failed":0}
|
||||
```
|
||||
|
||||
### Enhanced TAP Protocol (Protocol V2)
|
||||
|
||||
tstest uses an enhanced TAP protocol with Unicode delimiters for better parsing:
|
||||
|
||||
```
|
||||
⟦TSTEST:EVENT:test:started⟧{"name":"my test","timestamp":"2025-05-26T10:30:00.000Z"}
|
||||
ok 1 my test
|
||||
⟦TSTEST:EVENT:test:completed⟧{"name":"my test","passed":true,"duration":145}
|
||||
```
|
||||
|
||||
This prevents conflicts with test output that might contain TAP-like formatting.
|
||||
|
||||
## Advanced Features
|
||||
|
||||
### Glob Pattern Support
|
||||
|
||||
Run specific test patterns:
|
||||
@@ -731,6 +849,19 @@ tstest test/api/endpoints.test.ts --verbose --timeout 60
|
||||
|
||||
## Changelog
|
||||
|
||||
### Version 1.11.0
|
||||
- 👀 Added Watch Mode with `--watch`/`-w` flag for automatic test re-runs
|
||||
- 📊 Implemented real-time test progress updates with event streaming
|
||||
- 🎨 Added visual diffs for failed assertions with side-by-side comparison
|
||||
- 🔄 Enhanced event-based test lifecycle reporting
|
||||
- ⚙️ Added test configuration system with `.tstest.json` files
|
||||
- 🚀 Implemented Protocol V2 with Unicode delimiters for better TAP parsing
|
||||
- 🐛 Fixed `tap.todo()` to create proper test objects
|
||||
- 🐛 Fixed `tap.skip.test()` to correctly create and count test objects
|
||||
- 🐛 Fixed `tap.only.test()` implementation with `--only` flag support
|
||||
- 📁 Added settings inheritance for cascading test configuration
|
||||
- ⏱️ Added debouncing for file change events in watch mode
|
||||
|
||||
### 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
|
||||
|
Reference in New Issue
Block a user