Files
cypress/scripts/verify-accessibility-results.js
Jennifer Shehane 74b9fa3d80 chore: catch a11y errors and ignore them for now. (#30505)
* chore: catch a11y errors and ignore them for now.

* empty commit

* make a test fail

* Revert "make a test fail"

This reverts commit 166624d029.
2024-11-06 12:02:54 -05:00

86 lines
2.9 KiB
JavaScript

const { getAccessibilityResults } = require('@cypress/extract-cloud-results')
/**
* The list of rules that currently have 1+ elements that have been flagged with
* violations within the Cypress Accessibility report that need to be addressed.
*
* For example, the `aria-required-children` rule can have multiple
* elements that caused this rule to fail.
*
* Once the violation is fixed in the Cypress App's Accessibility report,
* the fixed rule should be removed from this list.
*
* View the Accessibility report for the Cypress run in the Cloud
* for more details on how to address these failures.
*/
const rulesWithExistingViolations = [
'aria-required-children',
'aria-required-parent',
'image-alt',
'aria-allowed-role',
'empty-heading',
'heading-order',
'page-has-heading-one',
'aria-dialog-name',
'aria-hidden-focus',
'color-contrast',
'link-in-text-block',
'list',
'listitem',
'nested-interactive',
'scrollable-region-focusable',
]
// This polls up to 30 times every 30 seconds.
// This resolves when the Accessibility report is ready for the Cypress run.
getAccessibilityResults({
projectId: 'ypt4pf',
})
.then((results) => {
const {
runNumber,
accessibilityReportUrl,
summary,
rules,
} = results
const { total } = summary.violationCounts
console.log(`Received ${summary.isPartialReport ? 'partial' : ''} results for run #${runNumber}.`)
console.log(`See full report at ${accessibilityReportUrl}.`)
// write your logic to conditionally fail based on the results
if (total === 0) {
console.log('No Accessibility violations detected!')
return
}
const { critical, serious, moderate, minor } = summary.violationCounts
console.log(`${total} Accessibility violations were detected - ${critical} critical, ${serious} serious, ${moderate} moderate, and ${minor} minor.`)
const newRuleViolations = rules.filter((rule) => !rulesWithExistingViolations.includes(rule.name))
if (newRuleViolations.length > 0) {
console.error('The following rules were violated that were previously passing:')
console.error(newRuleViolations)
throw new Error(`${newRuleViolations.length} rule regressions were introduced and must be fixed.`)
}
if (total < rulesWithExistingViolations.length) {
console.warn(`It seems you have resolved ${rulesWithExistingViolations.length - total} rule(s). Remove them from the list of problematic rules so regressions are not introduced.`)
}
console.log('No new Accessibility violations detected!')
})
.catch((error) => {
// We often get errors on reruns of failed tests because Cypress cannot generate a report
// where multiple runs are found. We'll ignore this until this is addressed within Cypress
// so as not to fail the build and affect our success rates.
console.log('Error occurred while processing the Accessibility report. This error will be ignored:')
console.log(error)
process.exit(0)
})