Output Formats
Prism supports multiple output formats for test results, suitable for different use cases.
Text Format (Default)
Section titled “Text Format (Default)”Beautiful, color-coded terminal output with Termwind:
vendor/bin/prism testEnhanced Terminal Output
Section titled “Enhanced Terminal Output”┌─────────────────────────────────────────────┐│ Test Suite: my-validator │├─────────────────────────────────────────────┤│ Total Tests: 1,247 ││ Passed: 1,198 ✓ ││ Failed: 49 ✗ ││ Pass Rate: 96.1% ││ Duration: 45.234s │└─────────────────────────────────────────────┘
✓ String validation tests (234/234)✓ Number validation tests (187/187)✗ Object validation tests (156/162)✓ Array validation tests (143/143)Show Detailed Failures
Section titled “Show Detailed Failures”Display failures with syntax-highlighted JSON diff:
vendor/bin/prism test --failures1. additional properties should not be valid Test ID: draft7:properties:3:2 File: properties.json Group: properties validation Expected Validation: INVALID Actual Validation: VALID
Error: Validation should have failed
Duration: 23.50ms
Test Data: { "foo": 1, "bar": "extra" }────────────────────────────────────────────────────────────────────────────────Enhanced Failure Display Features:
- Syntax highlighting: JSON values color-coded by type (strings=yellow, numbers=cyan, booleans/nulls=magenta)
- Test metadata: ID, file, group, expected vs actual validation state
- Error messages: Clear description of validation failures
- Performance metrics: Duration in milliseconds
- Structured layout: Easy to scan and debug
CI-Friendly Output
Section titled “CI-Friendly Output”Plain text output without Termwind formatting:
vendor/bin/prism test --ciCI Output Format
Section titled “CI Output Format”Test Suite: my-validatorTotal: 1247Passed: 1198Failed: 49Pass Rate: 96.07%Duration: 45.234s
PASS draft7:strings:0:0PASS draft7:strings:0:1FAIL draft7:properties:3:2PASS draft7:numbers:1:0Use Cases
Section titled “Use Cases”- Continuous Integration: GitHub Actions, GitLab CI, Jenkins
- Logging: Structured logs for parsing
- Automation: Scripts processing test results
JSON Format
Section titled “JSON Format”Machine-readable JSON output:
vendor/bin/prism test --format jsonJSON Structure
Section titled “JSON Structure”{ "suites": [ { "name": "my-validator", "total_tests": 1247, "passed_tests": 1198, "failed_tests": 49, "pass_rate": 96.07, "duration": 45.234, "results": [ { "id": "draft7:strings:0:0", "file": "strings.json", "group": "string validation", "description": "valid string", "data": "hello", "expected_valid": true, "actual_valid": true, "passed": true, "error": null, "duration": 0.012, "tags": ["string", "basic"] }, { "id": "draft7:properties:3:2", "file": "properties.json", "group": "properties validation", "description": "additional properties invalid", "data": {"foo": 1, "bar": "extra"}, "expected_valid": false, "actual_valid": true, "passed": false, "error": null, "duration": 0.023, "tags": ["object", "properties"] } ] } ]}Use Cases
Section titled “Use Cases”- API Integration: Send results to monitoring systems
- Data Analysis: Process results programmatically
- Storage: Archive test results in databases
Processing JSON Output
Section titled “Processing JSON Output”# Save to filevendor/bin/prism test --format json > results.json
# Parse with jqvendor/bin/prism test --format json | jq '.suites[0].pass_rate'
# Count failuresvendor/bin/prism test --format json | jq '[.suites[].results[] | select(.passed == false)] | length'JUnit XML Format
Section titled “JUnit XML Format”Standards-compliant JUnit XML output for CI/CD integration:
vendor/bin/prism test --format xmlXML Structure
Section titled “XML Structure”<?xml version="1.0" encoding="UTF-8"?><testsuites> <testsuite name="my-validator" tests="1247" failures="49" time="45.234"> <testcase name="draft7:strings:0:0" classname="string validation" time="0.012"> </testcase> <testcase name="draft7:properties:3:2" classname="properties validation" time="0.023"> <failure type="ValidationFailure"> Expected: invalid Actual: valid Data: {"foo":1,"bar":"extra"} </failure> </testcase> </testsuite></testsuites>Use Cases
Section titled “Use Cases”- JUnit Integration: Compatible with JUnit XML format
- CI Systems: Jenkins, Bamboo, TeamCity
- IDE Integration: PhpStorm, VS Code test runners
Combining Output with Features
Section titled “Combining Output with Features”JSON with Profiling
Section titled “JSON with Profiling”vendor/bin/prism test --format json --profile > results.jsonXML for CI with Failures
Section titled “XML for CI with Failures”vendor/bin/prism test --format xml --ci --failures > junit.xmlRedirecting Output
Section titled “Redirecting Output”Save to File
Section titled “Save to File”vendor/bin/prism test > test-results.txtvendor/bin/prism test --format json > results.jsonvendor/bin/prism test --format xml > junit.xmlPipe to Other Tools
Section titled “Pipe to Other Tools”# Filter with grepvendor/bin/prism test --ci | grep FAIL
# Parse with jqvendor/bin/prism test --format json | jq '.suites[].pass_rate'
# Parse XML with xmllintvendor/bin/prism test --format xml | xmllint --format -Output Customization
Section titled “Output Customization”Show Only Failures
Section titled “Show Only Failures”Combine format with failure filter:
vendor/bin/prism test --failures --ciDetailed JSON Output
Section titled “Detailed JSON Output”Include failure details in JSON:
vendor/bin/prism test --format json --failuresProfile with Text Output
Section titled “Profile with Text Output”Combine profiling with default format:
vendor/bin/prism test --profileIntegration Examples
Section titled “Integration Examples”GitHub Actions
Section titled “GitHub Actions”- name: Run Tests run: vendor/bin/prism test --format json --ci > results.json
- name: Upload Results uses: actions/upload-artifact@v3 with: name: test-results path: results.jsonGitLab CI
Section titled “GitLab CI”test: script: - vendor/bin/prism test --format junit > junit.xml artifacts: reports: junit: junit.xmlJenkins
Section titled “Jenkins”stage('Test') { steps { sh 'vendor/bin/prism test --format xml > junit.xml' } post { always { junit 'junit.xml' } }}Custom Monitoring
Section titled “Custom Monitoring”#!/bin/bash# Send results to monitoring service
vendor/bin/prism test --format json | \ jq '{ pass_rate: .suites[0].pass_rate, duration: .suites[0].duration, failures: .suites[0].failed_tests }' | \ curl -X POST https://monitoring.example.com/api/metrics \ -H "Content-Type: application/json" \ -d @-Next Steps
Section titled “Next Steps”- Learn about custom assertions
- Explore filtering options
- See performance features