chore: improve add-task command e2e test
This commit is contained in:
42
tests/e2e/setup/global-setup.js
Normal file
42
tests/e2e/setup/global-setup.js
Normal file
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* Global setup for E2E tests
|
||||
* Runs once before all test suites
|
||||
*/
|
||||
|
||||
const { execSync } = require('child_process');
|
||||
const { existsSync } = require('fs');
|
||||
const { join } = require('path');
|
||||
|
||||
module.exports = async () => {
|
||||
console.log('\n🚀 Setting up E2E test environment...\n');
|
||||
|
||||
try {
|
||||
// Ensure task-master is linked globally
|
||||
const projectRoot = join(__dirname, '../../..');
|
||||
console.log('📦 Linking task-master globally...');
|
||||
execSync('npm link', {
|
||||
cwd: projectRoot,
|
||||
stdio: 'inherit'
|
||||
});
|
||||
|
||||
// Verify .env file exists
|
||||
const envPath = join(projectRoot, '.env');
|
||||
if (!existsSync(envPath)) {
|
||||
console.warn('⚠️ Warning: .env file not found. Some tests may fail without API keys.');
|
||||
} else {
|
||||
console.log('✅ .env file found');
|
||||
}
|
||||
|
||||
// Verify task-master command is available
|
||||
try {
|
||||
execSync('task-master --version', { stdio: 'pipe' });
|
||||
console.log('✅ task-master command is available\n');
|
||||
} catch (error) {
|
||||
throw new Error('task-master command not found. Please ensure npm link succeeded.');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Global setup failed:', error.message);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
11
tests/e2e/setup/global-teardown.js
Normal file
11
tests/e2e/setup/global-teardown.js
Normal file
@@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Global teardown for E2E tests
|
||||
* Runs once after all test suites
|
||||
*/
|
||||
|
||||
module.exports = async () => {
|
||||
console.log('\n🧹 Cleaning up E2E test environment...\n');
|
||||
|
||||
// Any global cleanup needed
|
||||
// Note: Individual test directories are cleaned up in afterEach hooks
|
||||
};
|
||||
80
tests/e2e/setup/jest-setup.js
Normal file
80
tests/e2e/setup/jest-setup.js
Normal file
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* Jest setup file for E2E tests
|
||||
* Runs before each test file
|
||||
*/
|
||||
|
||||
const { TestHelpers } = require('../utils/test-helpers.cjs');
|
||||
const { TestLogger } = require('../utils/logger.cjs');
|
||||
|
||||
// Increase timeout for all E2E tests (can be overridden per test)
|
||||
jest.setTimeout(180000);
|
||||
|
||||
// Add custom matchers for CLI testing
|
||||
expect.extend({
|
||||
toContainTaskId(received) {
|
||||
const taskIdRegex = /#?\d+/;
|
||||
const pass = taskIdRegex.test(received);
|
||||
|
||||
if (pass) {
|
||||
return {
|
||||
message: () => `expected ${received} not to contain a task ID`,
|
||||
pass: true
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
message: () => `expected ${received} to contain a task ID (e.g., #123)`,
|
||||
pass: false
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
toHaveExitCode(received, expected) {
|
||||
const pass = received.exitCode === expected;
|
||||
|
||||
if (pass) {
|
||||
return {
|
||||
message: () => `expected exit code not to be ${expected}`,
|
||||
pass: true
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
message: () => `expected exit code ${expected} but got ${received.exitCode}\nstderr: ${received.stderr}`,
|
||||
pass: false
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
toContainInOutput(received, expected) {
|
||||
const output = (received.stdout || '') + (received.stderr || '');
|
||||
const pass = output.includes(expected);
|
||||
|
||||
if (pass) {
|
||||
return {
|
||||
message: () => `expected output not to contain "${expected}"`,
|
||||
pass: true
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
message: () => `expected output to contain "${expected}"\nstdout: ${received.stdout}\nstderr: ${received.stderr}`,
|
||||
pass: false
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Global test helpers
|
||||
global.TestHelpers = TestHelpers;
|
||||
global.TestLogger = TestLogger;
|
||||
|
||||
// Helper to create test context
|
||||
global.createTestContext = (testName) => {
|
||||
const logger = new TestLogger(testName);
|
||||
const helpers = new TestHelpers(logger);
|
||||
return { logger, helpers };
|
||||
};
|
||||
|
||||
// Clean up any hanging processes
|
||||
afterAll(async () => {
|
||||
// Give time for any async operations to complete
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
});
|
||||
Reference in New Issue
Block a user