Aangepaste Regels
Met de functie voor aangepaste regels kun je nieuwe regels maken om mee te testen en belangrijke gedragingen binnen bestaande regels wijzigen.
Laten we een aangepaste regel maken die controleert op de naam-eigenschap van een weergave. De resultaatcriteria zijn als volgt:
- Niet van toepassing: de naam is null
- Mislukt: de naam is niet null maar is leeg
- Geslaagd: de naam is niet null en heeft enige lengte
De Regels Maken
-
Stel een nieuw klasse-object in dat overerft van
AxeRule. Binnen de initialisator kun je de regelconfiguratie instellen om het volgende te specificeren:- Tegen welke standaard je test
- De impact
- Een samenvatting van de regel
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) } } -
Vervolgens moet je de eigenschappen van de weergave verzamelen om te testen. Voor ons voorbeeld moeten we toegang krijgen tot de naam-eigenschap.
override func collectProps(for node: AxeView) -> AxeProps {
let axeProps = AxeProps()
axeProps.add([
.name: node.name
])
return axeProps
}
- Ten slotte zullen we in de
runRulefunctie specificeren waar we tegen testen, om te bepalen of de regel is geslaagd, mislukt of als niet van toepassing wordt beschouwd.
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
}
}Toevoegen aan axe DevTools
Zodra je de logica voor je aangepaste regel hebt geschreven, voeg je deze toe aan de lijst met regels die axe DevTools kent door de configuratie aan te passen. Je moet de configuraties instellen voordat tests worden uitgevoerd en na authenticatie.
axe?.configuration.customRules.insert(CustomRule())Volledig Voorbeeld
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
}
}
}
