Skip to content

Commit d66b44c

Browse files
committed
fix: use mocked require in module mock
1 parent a6c359f commit d66b44c

File tree

1 file changed

+30
-15
lines changed

1 file changed

+30
-15
lines changed

test/lib/rule-finder.js

+30-15
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,24 @@ const processCwd = process.cwd;
1111
const eslintVersion = semver.satisfies(eslintPkg.version, '< 5') ? 'prior-v5' : 'post-v5';
1212
const supportsScopedPlugins = semver.satisfies(eslintPkg.version, '>= 5');
1313

14-
// The strategy is simple: if called with one of our plugins, just return
15-
// the module name, as-is. This is a lie because what we return is not a
16-
// path, but it is simple, and works. Otherwise, we just call the original
17-
// `resolve` from the stock module.
18-
const mockResolve = (plugins, relative, name) => (
19-
plugins.includes(name) ? name : createRequire(relative).resolve(name)
20-
);
14+
const mockCreateRequire = (getExport, plugins, relative) => {
15+
// Use the mocked require.
16+
const moduleRequire = (id) => {
17+
const targetExport = getExport();
18+
return module.children
19+
.find((m) => m.exports === targetExport)
20+
.require(id);
21+
};
22+
return Object.assign(moduleRequire, {
23+
// The strategy is simple: if called with one of our plugins, just return
24+
// the module name, as-is. This is a lie because what we return is not a
25+
// path, but it is simple, and works. Otherwise, we just call the original
26+
// `resolve` from the stock module.
27+
resolve: (name) => (
28+
plugins.includes(name) ? name : createRequire(relative).resolve(name)
29+
)
30+
});
31+
};
2132

2233
const getRuleFinder = proxyquire('../../src/lib/rule-finder', {
2334
eslint: {
@@ -32,16 +43,18 @@ const getRuleFinder = proxyquire('../../src/lib/rule-finder', {
3243
}
3344
},
3445
module: {
35-
createRequire: (relative) => Object.assign((id) => require(id), {
36-
resolve: mockResolve.bind(null, [
46+
createRequire: (relative) => mockCreateRequire(
47+
() => getRuleFinder,
48+
[
3749
'eslint-plugin-plugin',
3850
'eslint-plugin-no-rules',
3951
'@scope/eslint-plugin-scoped-plugin',
4052
'@scope/eslint-plugin',
4153
'@scope-with-dash/eslint-plugin-scoped-with-dash-plugin',
4254
'@scope-with-dash/eslint-plugin'
43-
], relative)
44-
}),
55+
],
56+
relative
57+
),
4558
'@global': true
4659
},
4760
'eslint-plugin-plugin': {
@@ -127,11 +140,13 @@ const getRuleFinderForDedupeTests = proxyquire('../../src/lib/rule-finder', {
127140
}
128141
},
129142
module: {
130-
createRequire: (relative) => Object.assign((id) => require(id), {
131-
resolve: mockResolve.bind(null, [
143+
createRequire: (relative) => mockCreateRequire(
144+
() => getRuleFinderForDedupeTests,
145+
[
132146
'eslint-plugin-plugin'
133-
], relative)
134-
}),
147+
],
148+
relative
149+
),
135150
'@global': true
136151
},
137152
'eslint-plugin-plugin': {

0 commit comments

Comments
 (0)