101 lines
3.2 KiB
TypeScript
101 lines
3.2 KiB
TypeScript
import { tap, expect } from '../../ts_tapbundle/index.js';
|
|
|
|
// Global state for testing lifecycle hooks
|
|
const lifecycleOrder: string[] = [];
|
|
|
|
tap.describe('Test Suite A', () => {
|
|
tap.beforeEach(async (toolsArg) => {
|
|
lifecycleOrder.push('Suite A - beforeEach');
|
|
});
|
|
|
|
tap.afterEach(async (toolsArg) => {
|
|
lifecycleOrder.push('Suite A - afterEach');
|
|
});
|
|
|
|
tap.test('test 1 in suite A', async (toolsArg) => {
|
|
lifecycleOrder.push('Test 1');
|
|
expect(true).toBeTrue();
|
|
});
|
|
|
|
tap.test('test 2 in suite A', async (toolsArg) => {
|
|
lifecycleOrder.push('Test 2');
|
|
expect(true).toBeTrue();
|
|
});
|
|
|
|
tap.describe('Nested Suite B', () => {
|
|
tap.beforeEach(async (toolsArg) => {
|
|
lifecycleOrder.push('Suite B - beforeEach');
|
|
});
|
|
|
|
tap.afterEach(async (toolsArg) => {
|
|
lifecycleOrder.push('Suite B - afterEach');
|
|
});
|
|
|
|
tap.test('test 1 in nested suite B', async (toolsArg) => {
|
|
lifecycleOrder.push('Nested Test 1');
|
|
expect(true).toBeTrue();
|
|
});
|
|
});
|
|
});
|
|
|
|
// Test outside any suite
|
|
tap.test('test outside suites', async (toolsArg) => {
|
|
lifecycleOrder.push('Outside Test');
|
|
expect(true).toBeTrue();
|
|
});
|
|
|
|
tap.describe('Test Suite with errors', () => {
|
|
tap.beforeEach(async (toolsArg) => {
|
|
// Setup that might fail
|
|
const data = await Promise.resolve({ value: 42 });
|
|
toolsArg.testData = data;
|
|
});
|
|
|
|
tap.test('test with error', async (toolsArg) => {
|
|
// Verify that data from beforeEach is available
|
|
expect(toolsArg.testData).toBeDefined();
|
|
expect(toolsArg.testData.value).toEqual(42);
|
|
|
|
// Test that error handling works by catching an error
|
|
try {
|
|
throw new Error('Intentional error');
|
|
} catch (error) {
|
|
expect(error.message).toEqual('Intentional error');
|
|
}
|
|
});
|
|
|
|
tap.test('test with skip in suite', async (toolsArg) => {
|
|
toolsArg.skip('Skipping this test in a suite');
|
|
expect(false).toBeTrue();
|
|
});
|
|
});
|
|
|
|
// Verify lifecycle order - this test runs last to check if all hooks were called properly
|
|
tap.test('verify lifecycle hook order', async (toolsArg) => {
|
|
// Wait a bit to ensure all tests have completed
|
|
await new Promise(resolve => setTimeout(resolve, 50));
|
|
console.log('Lifecycle order:', lifecycleOrder);
|
|
|
|
// Check that the tests we expect to have run actually did
|
|
expect(lifecycleOrder).toContain('Test 1');
|
|
expect(lifecycleOrder).toContain('Test 2');
|
|
expect(lifecycleOrder).toContain('Nested Test 1');
|
|
|
|
// Check that beforeEach was called before each test in Suite A
|
|
const test1Index = lifecycleOrder.indexOf('Test 1');
|
|
expect(test1Index).toBeGreaterThan(-1);
|
|
const beforeTest1 = lifecycleOrder.slice(0, test1Index);
|
|
expect(beforeTest1).toContain('Suite A - beforeEach');
|
|
|
|
// Check that afterEach was called after test 1
|
|
const afterTest1 = lifecycleOrder.slice(test1Index + 1);
|
|
expect(afterTest1).toContain('Suite A - afterEach');
|
|
|
|
// Check nested suite lifecycle
|
|
const nestedTest1Index = lifecycleOrder.indexOf('Nested Test 1');
|
|
expect(nestedTest1Index).toBeGreaterThan(-1);
|
|
const beforeNestedTest1 = lifecycleOrder.slice(0, nestedTest1Index);
|
|
expect(beforeNestedTest1).toContain('Suite B - beforeEach');
|
|
});
|
|
|
|
tap.start(); |