Skip to content

Commit 30aa570

Browse files
authored
fix: Avoid require conflict with Cypress [#1405] (#1406)
Use derequire the rename all uses of `require` to `_dereq_` to avoid the problem of Cypress overloading the `require` method. Closes #1405 ## Reviewer checks **Required fields, to be filled out by PR reviewer(s)** - [x] Follows the commit message policy, appropriate for next version - [x] Has documentation updated, a DU ticket, or requires no documentation change - [x] Includes new tests, or was unnecessary - [x] Code is reviewed for security by: Stephen
1 parent 0d3d267 commit 30aa570

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

build/imports-generator.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const path = require('path');
22
const browserify = require('browserify');
3+
const derequire = require('derequire');
34
const createFile = require('./shared/create-file');
45

56
const inputFile = path.join(
@@ -25,6 +26,8 @@ async function run() {
2526
throw new Error('Cannot browserify axe.imports', err);
2627
}
2728
try {
29+
// Replace `require` calls with `_dereq_` in order not to confuse Cypress.js
30+
result = derequire(result);
2831
await createFile(outputFile, result);
2932
} catch (error) {
3033
throw new Error('Cannot write browserify generated axe.imports', error);

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
"chai": "~4.1.2",
8686
"clone": "~2.1.1",
8787
"css-selector-parser": "^1.3.0",
88+
"derequire": "^2.0.6",
8889
"dot": "~1.1.2",
8990
"emoji-regex": "8.0.0",
9091
"es6-promise": "^4.2.6",

test/integration/full/umd/umd-module-exports.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ describe('UMD module.export', function() {
66
assert.strictEqual(module.exports, axe);
77
});
88

9+
it('does not use `require` functions', function() {
10+
// This is to avoid colliding with Cypress.js which overloads all
11+
// uses of variables named `require`.
12+
assert.notMatch(
13+
axe.source,
14+
/[^.]require\(/,
15+
'Axe source should not contain `require` variables'
16+
);
17+
});
18+
919
it('should ensure axe source includes axios', function() {
1020
assert.isTrue(axe.source.includes(axe.imports.axios.toString()));
1121
});

0 commit comments

Comments
 (0)