# Bun Test Output Customization Guide ## Command Line Options ### Basic Output Control ```bash # Run with coverage report bun test --coverage # Use specific coverage reporter (text or lcov) bun test --coverage --coverage-reporter=text bun test --coverage --coverage-reporter=lcov bun test --coverage --coverage-reporter=text,lcov # Set custom coverage directory bun test --coverage --coverage-dir=my-coverage # Run only specific test name patterns bun test --test-name-pattern="HttpClient" bun test -t "should handle" # Stop after first failure bun test --bail bun test --bail=3 # Stop after 3 failures # Run only tests marked with .only() bun test --only # Include todo tests bun test --todo ``` ### Reporters ```bash # Use JUnit XML reporter for CI/CD bun test --reporter=junit --reporter-outfile=test-results.xml # Default console output (no flag needed) bun test ``` ### Test Filtering ```bash # Run specific test files bun test http.test.ts bun test "**/*integration*" # Run tests multiple times to catch flaky tests bun test --rerun-each=3 ``` ## Configuration in bunfig.toml You can set default options in your bunfig.toml file: ```toml [test] # Always generate coverage coverage = true # Set custom timeout timeout = "10s" # Set default reporter reporter = "junit" reporter-outfile = "test-results.xml" # Set coverage options coverage-reporter = "text,lcov" coverage-dir = "coverage" # Test environment preload = ["./test/setup.ts"] [test.env] NODE_ENV = "test" LOG_LEVEL = "silent" ``` ## Custom Test Setup You can customize test output through your test setup files: ### In test/setup.ts: ```typescript // Customize console output console.log = (message) => { // Custom formatting if (typeof message === 'string') { console.info(`[TEST] ${new Date().toISOString()} ${message}`); } }; // Add custom test utilities global.testHelpers = { logTestStart: (testName: string) => { console.info(`๐Ÿงช Starting test: ${testName}`); }, logTestEnd: (testName: string, passed: boolean) => { const icon = passed ? 'โœ…' : 'โŒ'; console.info(`${icon} Completed test: ${testName}`); } }; ``` ### In individual test files: ```typescript import { describe, test, expect, beforeEach } from 'bun:test'; describe('HttpClient', () => { beforeEach(() => { global.testHelpers?.logTestStart('HttpClient test'); }); test('should work', () => { // Your test code global.testHelpers?.logTestEnd('should work', true); }); }); ``` ## Package.json Scripts Add custom test scripts with different output configurations: ```json { "scripts": { "test": "bun test", "test:coverage": "bun test --coverage", "test:junit": "bun test --reporter=junit --reporter-outfile=test-results.xml", "test:watch": "bun test --watch", "test:verbose": "bun test --coverage --coverage-reporter=text", "test:ci": "bun test --coverage --reporter=junit --reporter-outfile=test-results.xml --bail", "test:specific": "bun test --test-name-pattern" } } ``` ## Environment Variables Control output through environment variables: ```bash # Set log level for tests LOG_LEVEL=debug bun test # Silent mode LOG_LEVEL=silent bun test # Custom formatting TEST_OUTPUT_FORMAT=json bun test ```