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 | - Event data is JSON-encoded within protocol markers | ||||||
| - Parser handles events asynchronously for real-time updates | - Parser handles events asynchronously for real-time updates | ||||||
| - Visual diffs are generated using custom diff algorithms for each data type | - 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 |    - Trend analysis | ||||||
|    - Flaky test detection |    - Flaky test detection | ||||||
|  |  | ||||||
| ### Known Issues to Fix | ### Recently Fixed Issues ✅ | ||||||
| - **tap.todo()**: Method exists but has no implementation | - **tap.todo()**: Now fully implemented with test object creation | ||||||
| - **tap.skip.test()**: Doesn't create test objects, just logs (breaks test count) | - **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 | - **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 | ### 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   | 2. Implement Custom Reporters - important for CI/CD integration   | ||||||
| 3. Fix known issues: tap.todo() and tap.skip.test() implementations | 3. Implement performance benchmarking API | ||||||
| 4. 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