Reglas personalizadas

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard
Not for use with personal data

La función de reglas personalizadas le permite crear nuevas reglas para probar y cambiar comportamientos clave dentro de las reglas existentes.

Creemos una regla personalizada que compruebe la propiedad 'nombre' de una vista. Los criterios de resultado serán los siguientes:

  • No aplicable: el nombre es nulo
  • Error: el nombre no es nulo sino que está vacío
  • Éxito: el nombre no es nulo y tiene cierta longitud

Creación de la regla

  1. Configurar un nuevo objeto de clase que herede de AxeRule. Dentro del inicializador, puede configurar la regla para especificar lo siguiente:

    • ¿Contra qué estándar estás haciendo la prueba?
    • El impacto
    • Un resumen de la regla
    class CustomRule: AxeRule {
    
        public init() {
            let ruleConfiguration = RuleConf(standard: AxeStandard.BEST_PRACTICE,
                                            impact: AxeImpact.MODERATE,
                                            summary: "Asserts that when name is present it is not empty.")
            super.init(ruleConf: ruleConfiguration)
        }
    }
  2. A continuación, deberá recopilar las propiedades de la vista para probarla. Para nuestro ejemplo, necesitamos acceder a la propiedad name.

   override func collectProps(for node: AxeView) -> AxeProps {
        let axeProps = AxeProps()
        axeProps.add([
            .name: node.name
        ])

        return axeProps
   }
  1. Por último, especificaremos en la función contra qué estamos probando para determinar si la regla tuvo éxito, falló o se considera inaplicable. runRule
    override func runRule(_ props: AxeProps) throws -> AxeStatus {
        guard let name = props.get(.name, withType: String.self) else { return .INAPPLICABLE }

        if !name.isEmpty {
            return AxeStatus.PASS
        } else {
            return AxeStatus.FAIL
        }
    }

Agregar a Axe DevTools

Una vez que haya escrito la lógica para su regla personalizada, agréguela a la lista de reglas que axe DevTools conoce ajustando la configuración. Debes establecer las configuraciones antes de ejecutar cualquier prueba y después de la autenticación.

axe?.configuration.customRules.insert(CustomRule())

Ejemplo completo

class CustomRule: AxeRule {

    public init() {
        let ruleConfiguration = RuleConf(standard: AxeStandard.BEST_PRACTICE,
                                         impact: AxeImpact.MODERATE,
                                         summary: "Asserts that when name is present it is not empty.")
        super.init(ruleConf: ruleConfiguration)
    }

    override func collectProps(for node: AxeView) -> AxeProps {
        let axeProps = AxeProps()
        axeProps.add([
            .name: node.name
        ])

        return axeProps
    }

    override func runRule(_ props: AxeProps) throws -> AxeStatus {
        guard let name = props.get(.name, withType: String.self) else { return .INAPPLICABLE }

        if !name.isEmpty {
            return AxeStatus.PASS
        } else {
            return AxeStatus.FAIL
        }
    }
}