From f1269b255cc9bc17dccb520de1feff62e6f50b68 Mon Sep 17 00:00:00 2001 From: Marco Solazzi Date: Fri, 22 Jun 2018 14:38:31 +0900 Subject: [PATCH 01/11] updated version --- README.md | 17 ++++---- index.js | 108 ++++++++++++++++++++++----------------------------- package.json | 12 ++++-- 3 files changed, 64 insertions(+), 73 deletions(-) diff --git a/README.md b/README.md index e724846..c583df7 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ The TestCafe module that allows you to use the [aXe](https://github.com/dequelab ## Installation ```bash -npm install axe-testcafe +npm install axe-core axe-testcafe --save-dev ``` ## How to use @@ -12,17 +12,18 @@ npm install axe-testcafe You can write a TestCafe test with automated accessibility checks like this. ```js -import axeCheck from 'axe-testcafe'; +import { axeCheck, createReport } from '../lib/axe'; fixture `TestCafe tests with Axe` .page `http://example.com`; test('Automated accessibility testing', async t => { - await axeCheck(t); + const { error, violations } = await axeCheck(t); + await t.expect(violations.length === 0).ok(createReport(violations)); }); ``` -If any accessibility issues are found, you will see a detailed report. +If any accessibility issues are found, you will see a detailed report generated by the `createReport` function. ![Accessibility errors](https://github.com/helen-dikareva/axe-testcafe/blob/master/errors.png) @@ -32,8 +33,8 @@ The `axe-testcafe` module allows you to define the `context` and `options` [axe. ```js test('Automated accessibility testing', async () => { - var axeContext = { exclude: [['select']] }; - var axeOptions = { rules: { 'html-has-lang': { enabled: false } } }; - - await axeCheck(t, axeContext, axeOptions); + const axeContext = { exclude: [['select']] }; + const axeOptions = { rules: { 'html-has-lang': { enabled: false } } }; + const { error, violations } = await axeCheck(t, axeContext, axeOptions); + await t.expect(violations.length === 0).ok(createReport(violations)); }); diff --git a/index.js b/index.js index 5eb924c..ed1f881 100644 --- a/index.js +++ b/index.js @@ -1,74 +1,60 @@ -var fs = require('fs'); -var path = require('path'); -var testcafe = require('testcafe'); - -var ClientFunction = testcafe.ClientFunction; +const fs = require('fs'); +const path = require('path'); +const { ClientFunction } = require('testcafe'); +const { red, green, reset } = require('chalk'); var AXE_DIR_PATH = path.dirname(require.resolve('axe-core')); -var AXE_SCRIPT = fs.readFileSync(path.join(AXE_DIR_PATH, 'axe.min.js')).toString(); - -function AxeError (message) { - Error.call(this, message); +const AXE_SCRIPT = fs.readFileSync(path.join(AXE_DIR_PATH, 'axe.min.js'), 'utf8'); - this.name = 'AxeError'; - this.message = message; - - if (typeof Error.captureStackTrace === 'function') - Error.captureStackTrace(this, AxeError); - else - this.stack = (new Error(message)).stack; -} - -AxeError.prototype = Object.create(Error.prototype); - -var hasAxe = ClientFunction(function () { - return !!(window.axe && window.axe.run); -}); +const hasAxe = ClientFunction(() => !!(window.axe && window.axe.run)); -var injectAxe = ClientFunction(function () { +const injectAxe = ClientFunction(() => { eval(AXE_SCRIPT); -}, { dependencies: { AXE_SCRIPT: AXE_SCRIPT } }); +}, { dependencies: { AXE_SCRIPT } }); -var runAxe = ClientFunction(function (context, options) { - return new Promise(function (resolve) { - axe.run(context || document, options || {}, function (err, results) { - if (err) - return resolve(err.message); +const runAxe = ClientFunction((context, options = {}) => { + return new Promise((resolve) => { + axe.run(context || document, options, (error, { violations }) => { + resolve({ error, violations }); + }); + }); +}); - var errors = ''; +const createReport = (violations) => { + if (violations.length !== 0) { + const report = violations.reduce((acc, { nodes, help }, i) => { - if (results.violations.length !== 0) { - results.violations.forEach(function (violation) { - errors += violation.help + '\n\tnodes:\n'; + acc += red(`${i+1}) ${help}\n`); + + acc += reset(nodes.reduce((e, { target }) => { + const targetNodes = target.map((t) => `"${t}"`).join(', '); + e += `\t${targetNodes}\n`; + return e; + },'')); - violation.nodes.forEach(function (node) { - var targetNodes = node.target.map(function (target) { - return '"' + target + '"'; - }).join(', '); + return acc; - errors += '\t\t' + targetNodes + '\n'; - }); - }); - } + }, red(`${violations.length} violations found:\n`)); - return resolve(errors); - }); - }) -}); - -module.exports = function axeCheck (t, context, options) { - return hasAxe.with({ boundTestRun: t })() - .then(function (result) { - if (!result) - return injectAxe.with({ boundTestRun: t })(); + return reset(report); + } + return green('0 violations found'); +} - return Promise.resolve(); - }) - .then(function () { - return runAxe.with({ boundTestRun: t })(context, options); - }) - .then(function (error) { - if (error) - throw new AxeError('\n' + error); - }); +const axeCheck = async (t, context, options) => { + const hasScript = await hasAxe.with({ boundTestRun: t })(); + if (!hasScript) { + await injectAxe.with({ boundTestRun: t })(); + } + + try { + return await runAxe.with({ boundTestRun: t })(context, options); + } catch (e) { + return { error: e }; + } +}; + +module.exports = { + axeCheck, + createReport }; \ No newline at end of file diff --git a/package.json b/package.json index 3fdee43..3000bab 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,15 @@ { "name": "axe-testcafe", - "version": "1.1.0", + "version": "2.0.0", "description": "The TestCafe module that allows you to use the aXe accessibility engine in TestCafe tests", "main": "index.js", "repository": { "type": "git", "url": "https://github.com/helen-dikareva/axe-testcafe" }, + "engines": { + "node": ">=8.9.0" + }, "keywords": [ "axe", "testcafe", @@ -22,10 +25,11 @@ "files": [ "index.js" ], - "dependencies": { - "axe-core": "^2.2.3" - }, "peerDependencies": { + "axe-core": ">=2.2.3", "testcafe": "*" + }, + "dependencies": { + "chalk": "^2.4.1" } } From 50b695275e3f3d11f31a6f81023d46a691d9a118 Mon Sep 17 00:00:00 2001 From: Marco Solazzi Date: Fri, 22 Jun 2018 14:38:53 +0900 Subject: [PATCH 02/11] ingore lock files --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 22e6580..2e451ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -.idea \ No newline at end of file +.idea +*.lock \ No newline at end of file From 903b8416d0f0f0b0a0b42851f475fa35e9d83b89 Mon Sep 17 00:00:00 2001 From: Helen Dikareva Date: Thu, 7 Mar 2019 16:19:03 +0900 Subject: [PATCH 03/11] fix typo in README.md Co-Authored-By: dwightjack --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c583df7..b9138cf 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ npm install axe-core axe-testcafe --save-dev You can write a TestCafe test with automated accessibility checks like this. ```js -import { axeCheck, createReport } from '../lib/axe'; +import { axeCheck, createReport } from 'axe-testcafe'; fixture `TestCafe tests with Axe` .page `http://example.com`; From 9d1a068b39e0639a4366e39f7568363a30150462 Mon Sep 17 00:00:00 2001 From: Marco Solazzi Date: Thu, 7 Mar 2019 16:24:24 +0900 Subject: [PATCH 04/11] simplify function --- index.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/index.js b/index.js index ed1f881..77efa45 100644 --- a/index.js +++ b/index.js @@ -8,9 +8,7 @@ const AXE_SCRIPT = fs.readFileSync(path.join(AXE_DIR_PATH, 'axe.min.js'), 'utf8' const hasAxe = ClientFunction(() => !!(window.axe && window.axe.run)); -const injectAxe = ClientFunction(() => { - eval(AXE_SCRIPT); -}, { dependencies: { AXE_SCRIPT } }); +const injectAxe = ClientFunction(() => eval(AXE_SCRIPT), { dependencies: { AXE_SCRIPT } }); const runAxe = ClientFunction((context, options = {}) => { return new Promise((resolve) => { From 775a8dd226c83213ce4f2f21c62238a8aee3ea87 Mon Sep 17 00:00:00 2001 From: Marco Solazzi Date: Thu, 7 Mar 2019 16:25:11 +0900 Subject: [PATCH 05/11] remove brackets --- index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/index.js b/index.js index 77efa45..a20833c 100644 --- a/index.js +++ b/index.js @@ -41,9 +41,8 @@ const createReport = (violations) => { const axeCheck = async (t, context, options) => { const hasScript = await hasAxe.with({ boundTestRun: t })(); - if (!hasScript) { + if (!hasScript) await injectAxe.with({ boundTestRun: t })(); - } try { return await runAxe.with({ boundTestRun: t })(context, options); From 56338fa01a8de230f2e77c30eb469809ba052eeb Mon Sep 17 00:00:00 2001 From: Marco Solazzi Date: Thu, 7 Mar 2019 16:28:28 +0900 Subject: [PATCH 06/11] refactoring --- index.js | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/index.js b/index.js index a20833c..b964ae5 100644 --- a/index.js +++ b/index.js @@ -3,7 +3,7 @@ const path = require('path'); const { ClientFunction } = require('testcafe'); const { red, green, reset } = require('chalk'); -var AXE_DIR_PATH = path.dirname(require.resolve('axe-core')); +const AXE_DIR_PATH = path.dirname(require.resolve('axe-core')); const AXE_SCRIPT = fs.readFileSync(path.join(AXE_DIR_PATH, 'axe.min.js'), 'utf8'); const hasAxe = ClientFunction(() => !!(window.axe && window.axe.run)); @@ -18,26 +18,28 @@ const runAxe = ClientFunction((context, options = {}) => { }); }); -const createReport = (violations) => { - if (violations.length !== 0) { - const report = violations.reduce((acc, { nodes, help }, i) => { +const createReport = violations => { + if (!violations.length) { + return green('0 violations found'); + } - acc += red(`${i+1}) ${help}\n`); - - acc += reset(nodes.reduce((e, { target }) => { - const targetNodes = target.map((t) => `"${t}"`).join(', '); - e += `\t${targetNodes}\n`; - return e; - },'')); + const report = violations.reduce((acc, { nodes, help }, i) => { - return acc; + acc += red(`${i+1}) ${help}\n`); + + acc += reset(nodes.reduce((e, { target }) => { + const targetNodes = target.map((t) => `"${t}"`).join(', '); + e += `\t${targetNodes}\n`; + return e; + },'')); - }, red(`${violations.length} violations found:\n`)); + return acc; - return reset(report); - } - return green('0 violations found'); -} + }, red(`${violations.length} violations found:\n`)); + + return reset(report); + +}; const axeCheck = async (t, context, options) => { const hasScript = await hasAxe.with({ boundTestRun: t })(); From d6141d57b2b19eba1f8959a1bb6b467834f9f093 Mon Sep 17 00:00:00 2001 From: Marco Solazzi Date: Thu, 7 Mar 2019 16:28:51 +0900 Subject: [PATCH 07/11] bump axe-core to ^3.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3000bab..b376624 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "index.js" ], "peerDependencies": { - "axe-core": ">=2.2.3", + "axe-core": "^3.2.0", "testcafe": "*" }, "dependencies": { From 6553bc8171a9186c7791938e763fa101b755874b Mon Sep 17 00:00:00 2001 From: Marco Solazzi Date: Thu, 7 Mar 2019 16:30:35 +0900 Subject: [PATCH 08/11] update error image --- errors.png | Bin 7730 -> 54264 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/errors.png b/errors.png index ca784b8d3faccad33b138d3dfe6ab7e743db1ffe..ca6832651ce9a1d5e143a0692181b6cd8702fefd 100644 GIT binary patch literal 54264 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 P;78_}qC}zii#PuV$7(t$ literal 7730 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 f8;9_l{Tdyt`t2l Date: Fri, 22 Mar 2019 15:27:07 +0900 Subject: [PATCH 09/11] change axe-core peer dep minimum version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b376624..b7cafd9 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "index.js" ], "peerDependencies": { - "axe-core": "^3.2.0", + "axe-core": "^3.0.0", "testcafe": "*" }, "dependencies": { From c5a593fdf7d3178baa03f11e1ce2188ee6f9b9ab Mon Sep 17 00:00:00 2001 From: Marco Solazzi Date: Tue, 2 Apr 2019 17:39:59 +0900 Subject: [PATCH 10/11] adding typings --- index.d.ts | 18 ++++++++++++++++++ package.json | 1 + 2 files changed, 19 insertions(+) create mode 100644 index.d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..08d6064 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,18 @@ +declare module 'axe-testcafe' { + import { ElementContext, RunOnly, AxeResults, Result } from 'axe-core'; + import 'testcafe'; + + export function axeCheck( + t: TestController, + context?: ElementContext, + options?: { + runOnly?: RunOnly; + rules?: Object; + iframes?: Boolean; + elementRef?: Boolean; + selectors?: Boolean; + } + ): Promise; + + export function createReport(violations: Result[]): string; +} \ No newline at end of file diff --git a/package.json b/package.json index b7cafd9..b822693 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "2.0.0", "description": "The TestCafe module that allows you to use the aXe accessibility engine in TestCafe tests", "main": "index.js", + "typings": "index.d.ts", "repository": { "type": "git", "url": "https://github.com/helen-dikareva/axe-testcafe" From c779a28eba17542c56a03b8e2224a058e94fefb1 Mon Sep 17 00:00:00 2001 From: Marco Solazzi Date: Mon, 13 May 2019 11:08:08 +0900 Subject: [PATCH 11/11] fix package.json missing comma and version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5ba0d02..f30f8e8 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "index.js" ], "peerDependencies": { - "axe-core": "^2.2.3 || ^3.0.0" + "axe-core": ">=2.2.3 <4", "testcafe": "*" }, "dependencies": {