3.2 KiB
3.2 KiB
Architecture Overview
Project Structure
This project integrates tstest with tapbundle through a modular architecture:
- tstest (
/ts/
) - The test runner that discovers and executes test files - tapbundle (
/ts_tapbundle/
) - The TAP testing framework for writing tests - tapbundle_node (
/ts_tapbundle_node/
) - Node.js-specific testing utilities
How Components Work Together
Test Execution Flow
-
CLI Entry Point (
cli.js
<20>cli.ts.js
<20>cli.child.ts
)- The CLI uses tsx to run TypeScript files directly
- Accepts glob patterns to find test files
- Supports options like
--verbose
,--quiet
,--web
-
Test Discovery
- tstest scans for test files matching the provided pattern
- Defaults to
test/**/*.ts
when no pattern is specified - Supports both file and directory modes
-
Test Runner
- Each test file imports
tap
andexpect
from tapbundle - Tests are written using
tap.test()
with async functions - Browser tests are compiled with esbuild and run in Chromium via Puppeteer
- Each test file imports
Key Integration Points
-
Import Structure
- Test files import from local tapbundle:
import { tap, expect } from '../../ts_tapbundle/index.js'
- Node-specific tests also import from tapbundle_node:
import { tapNodeTools } from '../../ts_tapbundle_node/index.js'
- Test files import from local tapbundle:
-
WebHelpers
- Browser tests can use webhelpers for DOM manipulation
webhelpers.html
- Template literal for creating HTML stringswebhelpers.fixture
- Creates DOM elements from HTML strings- Automatically detects browser environment and only enables in browser context
-
Build System
- Uses
tsbuild tsfolders
to compile TypeScript - Maintains separate output directories:
/dist_ts/
,/dist_ts_tapbundle/
,/dist_ts_tapbundle_node/
- Compilation order is resolved automatically based on dependencies
- Uses
Test Scripts
The package.json defines several test scripts:
test
- Builds and runs all tests (tapbundle and tstest)test:tapbundle
- Runs tapbundle framework teststest:tstest
- Runs tstest's own tests- Both support
:verbose
variants for detailed output
Environment Detection
The framework automatically detects the runtime environment:
- Node.js tests run directly via tsx
- Browser tests are compiled and served via a local server
- WebHelpers are only enabled in browser environment
This architecture allows for seamless testing across both Node.js and browser environments while maintaining a clean separation of concerns.
Logging System
Log File Naming (Fixed in v1.9.1)
When using the --logfile
flag, tstest creates log files in .nogit/testlogs/
. The log file naming was updated to preserve directory structure and prevent collisions:
- Old behavior:
test/tapbundle/test.ts
→.nogit/testlogs/test.log
- New behavior:
test/tapbundle/test.ts
→.nogit/testlogs/test__tapbundle__test.log
This fix ensures that test files with the same basename in different directories don't overwrite each other's logs. The implementation:
- Takes the relative path from the current working directory
- Replaces path separators (
/
) with double underscores (__
) - Removes the
.ts
extension - Creates a flat filename that preserves the directory structure