Testing React Applications with CSP
Testing React Applications with CSP
Implementing comprehensive testing ensures your CSP policies don't break React functionality:
// csp-test-utils.js
export const testCSPCompliance = (component, cspPolicy) => {
// Mock CSP environment
const originalCSP = document.querySelector('meta[http-equiv="Content-Security-Policy"]');
// Create test CSP meta tag
const testCSP = document.createElement('meta');
testCSP.httpEquiv = 'Content-Security-Policy';
testCSP.content = cspPolicy;
document.head.appendChild(testCSP);
try {
// Test component renders without CSP violations
const { container } = render(component);
// Check for blocked resources
const blockedScripts = container.querySelectorAll('script[blocked]');
const blockedStyles = container.querySelectorAll('style[blocked]');
expect(blockedScripts.length).toBe(0);
expect(blockedStyles.length).toBe(0);
return true;
} catch (error) {
console.error('CSP test failed:', error);
return false;
} finally {
// Restore original CSP
document.head.removeChild(testCSP);
if (originalCSP) document.head.appendChild(originalCSP);
}
};
// Jest test example
describe('CSP Compliance Tests', () => {
test('App renders with strict CSP', () => {
const strictCSP = "default-src 'self'; script-src 'self' 'nonce-test123';";
const result = testCSPCompliance(<App />, strictCSP);
expect(result).toBe(true);
});
});