fix: Implement tap.todo(), fix tap.skip.test() to create test objects, and ensure tap.only.test() works correctly
- tap.todo.test() now creates proper test objects marked as todo - tap.skip.test() creates test objects instead of just logging - tap.only.test() properly filters to run only marked tests - Added markAsSkipped() method for pre-test skip marking - All test types now contribute to accurate test counts - Updated documentation to reflect these fixes 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
		| @@ -216,3 +216,26 @@ The Enhanced Communication system has been implemented to provide rich, real-tim | ||||
| - Event data is JSON-encoded within protocol markers | ||||
| - Parser handles events asynchronously for real-time updates | ||||
| - Visual diffs are generated using custom diff algorithms for each data type | ||||
|  | ||||
| ## Fixed Issues | ||||
|  | ||||
| ### tap.skip.test(), tap.todo(), and tap.only.test() (Fixed) | ||||
|  | ||||
| Previously reported issues with these methods have been resolved: | ||||
|  | ||||
| 1. **tap.skip.test()** - Now properly creates test objects that are counted in test results | ||||
|    - Tests marked with `skip.test()` appear in the test count | ||||
|    - Shows as passed with skip directive in TAP output | ||||
|    - `markAsSkipped()` method added to handle pre-test skip marking | ||||
|  | ||||
| 2. **tap.todo.test()** - Fully implemented with test object creation | ||||
|    - Supports both `tap.todo.test('description')` and `tap.todo.test('description', testFunc)` | ||||
|    - Todo tests are counted and marked with todo directive | ||||
|    - Both regular and parallel todo tests supported | ||||
|  | ||||
| 3. **tap.only.test()** - Works correctly for focused testing | ||||
|    - When `.only` tests exist, only those tests run | ||||
|    - Other tests are not executed but still counted | ||||
|    - Both regular and parallel only tests supported | ||||
|  | ||||
| These fixes ensure accurate test counts and proper TAP-compliant output for all test states. | ||||
| @@ -304,14 +304,16 @@ tstest --changed | ||||
|    - Trend analysis | ||||
|    - Flaky test detection | ||||
|  | ||||
| ### Known Issues to Fix | ||||
| - **tap.todo()**: Method exists but has no implementation | ||||
| - **tap.skip.test()**: Doesn't create test objects, just logs (breaks test count) | ||||
| ### Recently Fixed Issues ✅ | ||||
| - **tap.todo()**: Now fully implemented with test object creation | ||||
| - **tap.skip.test()**: Now creates test objects and maintains accurate test count | ||||
| - **tap.only.test()**: Works correctly - when .only tests exist, only those run | ||||
|  | ||||
| ### Remaining Minor Issues | ||||
| - **Protocol Output**: Some protocol messages still appear in console output | ||||
| - **Only Tests**: `tap.only.test()` exists but `--only` mode not fully implemented | ||||
|  | ||||
| ### Next Recommended Steps | ||||
| 1. Add Watch Mode - high developer value | ||||
| 1. Add Watch Mode (Phase 4) - high developer value for fast feedback | ||||
| 2. Implement Custom Reporters - important for CI/CD integration   | ||||
| 3. Fix known issues: tap.todo() and tap.skip.test() implementations | ||||
| 4. Implement performance benchmarking API | ||||
| 3. Implement performance benchmarking API | ||||
| 4. Add better error messages with suggestions | ||||
| @@ -1,56 +0,0 @@ | ||||
| import { tap, expect } from '../../ts_tapbundle/index.js'; | ||||
|  | ||||
| tap.test('should show string diff', async () => { | ||||
|   const expected = `Hello World | ||||
| This is a test | ||||
| of multiline strings`; | ||||
|    | ||||
|   const actual = `Hello World | ||||
| This is a demo | ||||
| of multiline strings`; | ||||
|    | ||||
|   // This will fail and show a diff | ||||
|   expect(actual).toEqual(expected); | ||||
| }); | ||||
|  | ||||
| tap.test('should show object diff', async () => { | ||||
|   const expected = { | ||||
|     name: 'John', | ||||
|     age: 30, | ||||
|     city: 'New York', | ||||
|     hobbies: ['reading', 'coding'] | ||||
|   }; | ||||
|    | ||||
|   const actual = { | ||||
|     name: 'John', | ||||
|     age: 31, | ||||
|     city: 'Boston', | ||||
|     hobbies: ['reading', 'gaming'] | ||||
|   }; | ||||
|    | ||||
|   // This will fail and show a diff | ||||
|   expect(actual).toEqual(expected); | ||||
| }); | ||||
|  | ||||
| tap.test('should show array diff', async () => { | ||||
|   const expected = [1, 2, 3, 4, 5]; | ||||
|   const actual = [1, 2, 3, 5, 6]; | ||||
|    | ||||
|   // This will fail and show a diff | ||||
|   expect(actual).toEqual(expected); | ||||
| }); | ||||
|  | ||||
| tap.test('should show primitive diff', async () => { | ||||
|   const expected = 42; | ||||
|   const actual = 43; | ||||
|    | ||||
|   // This will fail and show a diff | ||||
|   expect(actual).toBe(expected); | ||||
| }); | ||||
|  | ||||
| tap.test('should pass without diff', async () => { | ||||
|   expect(true).toBe(true); | ||||
|   expect('hello').toEqual('hello'); | ||||
| }); | ||||
|  | ||||
| tap.start({ throwOnError: false }); | ||||
| @@ -1,23 +0,0 @@ | ||||
| import { tap, expect } from '../../ts_tapbundle/index.js'; | ||||
|  | ||||
| tap.test('should show string diff', async () => { | ||||
|   const expected = `line 1 | ||||
| line 2 | ||||
| line 3`; | ||||
|    | ||||
|   const actual = `line 1 | ||||
| line changed | ||||
| line 3`; | ||||
|    | ||||
|   try { | ||||
|     expect(actual).toEqual(expected); | ||||
|   } catch (e) { | ||||
|     // Expected to fail | ||||
|   } | ||||
| }); | ||||
|  | ||||
| tap.test('should pass', async () => { | ||||
|   expect('hello').toEqual('hello'); | ||||
| }); | ||||
|  | ||||
| tap.start({ throwOnError: false }); | ||||
		Reference in New Issue
	
	Block a user