--- title: "Testing" linkTitle: "Testing" weight: 30 description: > Quality assurance processes for documentation. --- ## Testing Philosophy Quality documentation requires testing. Our testing process validates: - **Build integrity** - Hugo can generate the site - **Content quality** - Markdown follows best practices - **HTML validity** - Generated HTML is well-formed - **Link integrity** - No broken internal or external links ## Testing Capabilities {{< likec4-view view="testingCapabilities" project="documentation-platform" >}} ## Local Testing Before committing changes, run tests locally: ### Quick Tests For rapid feedback during development: ```bash task test:quick ``` This runs: - `task test:build` - Hugo build validation - `task test:markdown` - Markdown linting ### Full Test Suite Before creating a pull request: ```bash task test ``` This runs all tests including: - `task test:build` - Build validation - `task test:markdown` - Markdown linting - `task test:html` - HTML validation - `task test:links` - Link checking ## Individual Tests You can run individual tests: ### Build Test Validates that Hugo can build the site: ```bash task test:build ``` This runs: `hugo --gc --minify --logLevel info` **What it checks:** - Hugo configuration is valid - Content files have correct frontmatter - Templates render without errors - No circular dependencies in content structure ### Markdown Lint Checks Markdown syntax and style: ```bash task test:markdown ``` This uses `markdownlint` with custom rules in `.markdownlint.json`. **What it checks:** - Consistent heading hierarchy - Proper list formatting - Code blocks have language tags - No trailing whitespace - Consistent line length (where applicable) **Common issues:** - Missing blank lines around code blocks - Inconsistent list markers - Heading levels skipped ### HTML Validation Validates generated HTML: ```bash task test:html ``` This uses `htmlvalidate` with rules in `.htmlvalidate.json`. **What it checks:** - Well-formed HTML5 - Proper nesting of elements - Valid attributes - Accessible markup ### Link Checking Verifies all links are valid: ```bash task test:links ``` This uses `htmltest` configured in `.htmltest.yml`. **What it checks:** - Internal links point to existing pages - External links are reachable - Anchor links target existing elements - No redirects (301/302) **Note:** This test can be slow for large sites with many external links. ## CI Testing All tests run automatically on: - **Push to `main`** - Full test suite - **Pull requests** - Full test suite View the GitHub Actions workflow: `.github/workflows/test.yml` ### CI Test Results If tests fail in CI: 1. Check the GitHub Actions logs 2. Look for specific test failures 3. Run the same test locally: `task test:` 4. Fix the issue 5. Commit and push ### Artifacts CI uploads test artifacts: - `htmltest-report/` - Link checking results Download these from the GitHub Actions run to investigate failures. ## Test Configuration Files | File | Purpose | |------|---------| | `.markdownlint.json` | Markdown linting rules | | `.htmlvalidate.json` | HTML validation rules | | `.htmltest.yml` | Link checker configuration | ## Best Practices 1. **Test early, test often** - Run `task test:quick` frequently 2. **Fix issues immediately** - Don't accumulate technical debt 3. **Understand failures** - Read error messages carefully 4. **Update tests** - If rules change, update config files 5. **Document exceptions** - If you need to ignore a rule, document why ## Common Issues and Solutions ### Markdown: MD031 - Blank lines around fences **Problem:** Missing blank line before/after code block **Solution:** Add blank lines: ```markdown Some text ​```bash command here ​``` More text ``` ### Markdown: MD032 - Blank lines around lists **Problem:** Missing blank line before/after list **Solution:** Add blank lines: ```markdown Text before - List item 1 - List item 2 Text after ``` ### HTML: Invalid nesting **Problem:** Elements improperly nested **Solution:** Check template files and shortcodes ### Link Check: 404 Not Found **Problem:** Link points to non-existent page **Solution:** - Fix the link - Create the missing page - Remove the link if no longer relevant ## Next Steps Learn about the automated [CI/CD pipeline](../cicd/).