Error Testing

Test error handling

JavaScriptIntermediate
JavaScript
// Method 1: Test error throwing
function testErrorThrowing() {
    try {
        throw new Error('Test error');
        return false; // Should not reach here
    } catch (error) {
        return error.message === 'Test error';
    }
}

console.log('Error test:', testErrorThrowing());

// Method 2: Test error types
function testErrorType() {
    try {
        throw new TypeError('Type error');
    } catch (error) {
        return error instanceof TypeError;
    }
}

// Method 3: Mock error scenarios
function createErrorScenario(type) {
    switch (type) {
        case 'network':
            throw new Error('Network error');
        case 'timeout':
            throw new Error('Timeout');
        case 'validation':
            throw new ValidationError('Invalid input');
        default:
            throw new Error('Unknown error');
    }
}

// Method 4: Error assertion helper
function assertError(fn, expectedError) {
    try {
        fn();
        return false; // Should have thrown
    } catch (error) {
        if (expectedError) {
            return error instanceof expectedError;
        }
        return true; // Any error is fine
    }
}

assertError(() => {
    throw new TypeError('Type error');
}, TypeError);

// Method 5: Async error testing
async function testAsyncError() {
    try {
        await Promise.reject(new Error('Async error'));
        return false;
    } catch (error) {
        return error.message === 'Async error';
    }
}

// Method 6: Error boundary testing
function testErrorBoundary(errorBoundary, errorFn) {
    try {
        errorFn();
    } catch (error) {
        errorBoundary.catchError(error, { component: 'TestComponent' });
    }
    return errorBoundary.getErrors().length > 0;
}

// Method 7: Integration error testing
async function testErrorHandling() {
    const scenarios = [
        () => { throw new Error('Error 1'); },
        () => { throw new TypeError('Error 2'); },
        () => { throw new ReferenceError('Error 3'); }
    ];
    
    const results = scenarios.map(scenario => {
        try {
            scenario();
            return { passed: false };
        } catch (error) {
            return { passed: true, error: error.name };
        }
    });
    
    return results;
}

Output

Error test: true

Error testing ensures proper handling.

Error Throwing Tests

  • Verify errors thrown
  • Check error messages
  • Validate error types

Error Type Tests

  • instanceof checks
  • Error names
  • Custom error types

Mock Scenarios

  • Network errors
  • Timeout errors
  • Validation errors
  • Various failures

Assertion Helpers

  • Check error thrown
  • Verify error type
  • Test error handling

Async Error Tests

  • Promise rejections
  • Async/await errors
  • Error propagation

Integration Tests

  • Multiple scenarios
  • Error boundaries
  • Recovery logic

Best Practices

  • Test all error paths
  • Mock error scenarios
  • Verify error handling
  • Test recovery