Unit Tests
The project uses Vitest for unit testing.Running Tests
Test Configuration
Tests are configured invitest.config.js:
Test Coverage
Tests focus on the shared utilities insrc/lib/**/*.js. Coverage reports are generated in both text and HTML formats.
Linting
The project uses ESLint with security plugins to catch code quality issues.Running the Linter
Linting Rules
The ESLint configuration (eslint.config.js) enforces:
-
Security rules via
eslint-plugin-security- Detects unsafe regex patterns
- Prevents eval and similar dangerous patterns
- Warns about potential timing attacks
- Catches buffer and child process issues
-
JavaScript best practices
- No
eval()ornew Function() - No implied eval
- Modern ES2022 syntax
- No
Example Security Rules
Chrome Validation
Validate the Chrome extension build with a custom validation script:Validates manifest.json
- Checks manifest version is 3
- Verifies required fields (name, version, description)
- Validates version format (X.Y.Z)
- Checks name length (max 45 characters)
- Checks description length (max 132 characters)
Chrome Validator Output
The validator provides detailed feedback:Firefox Validation
Validate the Firefox extension build using Mozillaโs official linter:Runs addons-linter
Uses Mozillaโs addons-linter to validate:
- Manifest structure
- File references
- Permission usage
- Firefox compatibility
- Security issues
addons-linter
The official Mozilla tool checks for:- Valid JSON in manifest.json
- Proper use of WebExtension APIs
- Security vulnerabilities
- Compatibility with Firefox versions
- Missing or invalid files
Complete Validation Workflow
Run all validations at once:Integration with Release Process
The complete validation is run automatically during the release process:Continuous Integration
For CI/CD pipelines, use the validate command:Writing Tests
Tests are located in thetests/ directory:
Example Test Structure
Troubleshooting
Tests Failing
If tests fail:- Check test output for specific failure messages
- Ensure dependencies are installed:
npm install - Verify test files are in
tests/**/*.test.js - Run in watch mode for faster debugging:
npm run test:watch
Linting Errors
If linting fails:- Review the error messages for specific issues
- Try auto-fix:
npm run lint:fix - Check that youโre not using
eval()or similar dangerous patterns - Ensure proper indentation and syntax
Validation Failures
If browser validation fails:-
Chrome: Check the validator output for specific errors
- Verify all referenced files exist
- Ensure no inline scripts in HTML
- Check manifest field values
-
Firefox: Review addons-linter output
- Check for Firefox-specific API compatibility
- Verify
browser_specific_settingsin manifest - Ensure all permissions are valid