UNPKG

react-a11y

Version:

Warns about potential accessibility issues with your React elements.

90 lines (79 loc) 3.21 kB
/* global describe, it */ /* eslint-disable no-unused-expressions,global-require,import/no-dynamic-require */ import path from 'path'; import { expect } from 'chai'; import A11y from '../a11y'; export default function ({ React, ReactDOM, rules }) { describe('rules', () => { Object.keys(rules).forEach((rule) => { describe(rule, () => { const { default: defns, test, pass = [], fail = [], description } = require(`../rules/${rule}`); expect(description).to.be.a.string; expect(pass).to.have.length.above(0); expect(fail).to.have.length.above(0); const defn = Array.isArray(defns) ? defns : [defns]; // get all messages const msgs = defn.reduce((acc, def) => acc.concat(def.msg), []); pass.forEach((ok) => { it(`doesn't warn when ${ok.when}`, (done) => { let cnt = 0; const a11y = new A11y(React, ReactDOM, { reporter(info) { const { msg } = info; if (msgs.indexOf(msg) >= 0) { cnt += 1; } }, rules: { [rule]: [ 'warn', ...(ok.opts || []) ] } }); // create the el ok.render(React); // restore and finish setTimeout(() => { expect(cnt === 0).to.be.true; a11y.restoreAll(); done(); }, 20); }); }); fail.forEach((bad) => { it(`warns when ${bad.when}`, (done) => { let called = false; const a11y = new A11y(React, ReactDOM, { reporter(info) { called = true; const { msg } = info; expect(msgs.indexOf(msg) >= 0).to.be.true; a11y.restoreAll(); done(); }, rules: { [rule]: [ 'warn', ...(bad.opts || []) ] } }); // create the el bad.render(React); }); }); }); }); }); }