From f803c98dc9110d6abe34e7746a076e12f3b6fe45 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 17 Aug 2021 09:36:33 -0400 Subject: [PATCH] feat(playwright): allow `AxeBuilder` to use different version of axe-core (#335) * feat(playwright): allow `AxeBuilder` to use different version of axe-core * ignore eslint --- .eslintignore | 1 + packages/playwright/fixtures/external | 1 + packages/playwright/src/index.ts | 8 ++++--- packages/playwright/src/test.ts | 34 +++++++++++++++++++++------ packages/playwright/src/types.ts | 1 + 5 files changed, 35 insertions(+), 10 deletions(-) create mode 120000 packages/playwright/fixtures/external diff --git a/.eslintignore b/.eslintignore index 7398509f..2094d285 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,3 +4,4 @@ packages/webdriverjs/src/test/fixtures/* packages/webdriverio/fixtures/* packages/puppeteer/test/fixtures/* **/dist/* +packages/playwright/fixtures/* diff --git a/packages/playwright/fixtures/external b/packages/playwright/fixtures/external new file mode 120000 index 00000000..c48c087c --- /dev/null +++ b/packages/playwright/fixtures/external @@ -0,0 +1 @@ +../../../node_modules/axe-test-fixtures/fixtures/ \ No newline at end of file diff --git a/packages/playwright/src/index.ts b/packages/playwright/src/index.ts index b4409c3a..6300acbf 100644 --- a/packages/playwright/src/index.ts +++ b/packages/playwright/src/index.ts @@ -1,6 +1,6 @@ +import * as fs from 'fs'; import type { Page, Frame } from 'playwright'; import type { RunOptions, AxeResults } from 'axe-core'; -import { source } from 'axe-core'; import { normalizeContext, analyzePage } from './utils'; import type { AxePlaywrightParams } from './types'; @@ -10,12 +10,14 @@ export default class AxeBuilder { private excludes: string[]; private option: RunOptions; private source: string; - constructor({ page }: AxePlaywrightParams) { + constructor({ page, axeSource }: AxePlaywrightParams) { + const axePath = require.resolve('axe-core'); + const source = fs.readFileSync(axePath, 'utf-8'); this.page = page; this.includes = []; this.excludes = []; this.option = {}; - this.source = source; + this.source = axeSource || source; } /** diff --git a/packages/playwright/src/test.ts b/packages/playwright/src/test.ts index ff87307a..c09b568d 100644 --- a/packages/playwright/src/test.ts +++ b/packages/playwright/src/test.ts @@ -1,4 +1,5 @@ import 'mocha'; +import * as fs from 'fs'; import * as playwright from 'playwright'; import * as express from 'express'; import type { AxeResults } from 'axe-core'; @@ -13,6 +14,11 @@ describe('@axe-core/playwright', () => { let addr: string; let page: playwright.Page; let browser: playwright.ChromiumBrowser; + const axeTestFixtures = path.resolve(__dirname, '..', 'fixtures'); + const axeLegacySource = fs.readFileSync( + path.resolve(axeTestFixtures, 'external', 'axe-core@legacy.js'), + 'utf-8' + ); before(async () => { const app = express(); @@ -38,6 +44,20 @@ describe('@axe-core/playwright', () => { }); describe('analyze', () => { + it('returns results using a different version of axe-core', async () => { + await page.goto(`${addr}/index.html`); + const results = await new AxeBuilder({ + page, + axeSource: axeLegacySource + }).analyze(); + assert.strictEqual(results.testEngine.version, '4.0.3'); + assert.isNotNull(results); + assert.isArray(results.violations); + assert.isArray(results.incomplete); + assert.isArray(results.passes); + assert.isArray(results.inapplicable); + }); + it('returns results', async () => { await page.goto(`${addr}/index.html`); const results = await new AxeBuilder({ page }).analyze(); @@ -196,22 +216,22 @@ describe('@axe-core/playwright', () => { }); it('injects once per iframe', async () => { - await page.goto(`${addr}/nested-frames.html`) + await page.goto(`${addr}/nested-frames.html`); const builder = new AxeBuilder({ page }); const origScript = (builder as any).script; let count = 0; Object.defineProperty(builder, 'script', { get() { - count++ - return origScript + count++; + return origScript; } - }) + }); - await builder.analyze() + await builder.analyze(); - assert.strictEqual(count, 4) - }) + assert.strictEqual(count, 4); + }); }); describe('include/exclude', () => { diff --git a/packages/playwright/src/types.ts b/packages/playwright/src/types.ts index 8e612676..a8b69683 100644 --- a/packages/playwright/src/types.ts +++ b/packages/playwright/src/types.ts @@ -13,6 +13,7 @@ export interface NormalizeContextResponse { export interface AxePlaywrightParams { page: Page; + axeSource?: string; } export interface AnalyzePageResponse {