Skip to content

Commit

Permalink
fixup! test_runner: refactor mock_loader
Browse files Browse the repository at this point in the history
  • Loading branch information
aduh95 committed Aug 16, 2024
1 parent 8f72156 commit db0e8e2
Showing 1 changed file with 33 additions and 11 deletions.
44 changes: 33 additions & 11 deletions test/parallel/test-runner-module-mocking.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const fixtures = require('../common/fixtures');
const assert = require('node:assert');
const { relative } = require('node:path');
const { test } = require('node:test');
const { fileURLToPath, pathToFileURL } = require('node:url');
const { pathToFileURL } = require('node:url');

test('input validation', async (t) => {
await t.test('throws if specifier is not a string', (t) => {
Expand Down Expand Up @@ -514,21 +514,41 @@ test('CJS mocks can be used by both module systems', async (t) => {
const cjsMock = t.mock.module(cjsFixture, {
namedExports: { fn() { return 42; } },
});
let esmImpl = await import(pathToFileURL(cjsFixture));
let esmImpl = await import(cjsFixture);
let cjsImpl = require(cjsFixture);

assert.strictEqual(esmImpl.fn(), 42);
assert.strictEqual(cjsImpl.fn(), 42);

cjsMock.restore();

esmImpl = await import(pathToFileURL(cjsFixture));
esmImpl = await import(cjsFixture);
cjsImpl = require(cjsFixture);

assert.strictEqual(esmImpl.default.string, 'original cjs string');
assert.strictEqual(cjsImpl.string, 'original cjs string');
});

test('ESM mocks can be used by both module systems', async (t) => {
const esmFixture = fixtures.path('module-mocking', 'basic-esm.mjs');
const esmMock = t.mock.module(esmFixture, {
namedExports: { fn() { return 42; } },
});

let cjsImpl = require(esmFixture);
let esmImpl = await import(esmFixture);

assert.strictEqual(cjsImpl.fn(), 42);
assert.strictEqual(esmImpl.fn(), 42);

esmMock.restore();
cjsImpl = require(esmFixture);
esmImpl = await import(esmFixture);

assert.strictEqual(esmImpl.string, 'original esm string');
assert.strictEqual(cjsImpl.string, 'original esm string');
});

test('relative paths can be used by both module systems', async (t) => {
const fixture = relative(
__dirname, fixtures.path('module-mocking', 'basic-esm.mjs')
Expand Down Expand Up @@ -566,7 +586,9 @@ test('node_modules can be used by both module systems', async (t) => {
});

test('file:// imports are supported in ESM only', async (t) => {
const fixture = fixtures.fileURL('module-mocking', 'basic-esm.mjs').href;
const fixture = pathToFileURL(
fixtures.path('module-mocking', 'basic-esm.mjs')
).href;
const mock = t.mock.module(fixture, {
namedExports: { fn() { return 42; } },
});
Expand All @@ -582,9 +604,9 @@ test('file:// imports are supported in ESM only', async (t) => {
});

test('mocked modules do not impact unmocked modules', async (t) => {
const mockedFixture = fixtures.fileURL('module-mocking', 'basic-cjs.js');
const unmockedFixture = fixtures.fileURL('module-mocking', 'basic-esm.mjs');
t.mock.module(`${mockedFixture}`, {
const mockedFixture = fixtures.path('module-mocking', 'basic-cjs.js');
const unmockedFixture = fixtures.path('module-mocking', 'basic-esm.mjs');
t.mock.module(mockedFixture, {
namedExports: { fn() { return 42; } },
});
const mockedImpl = await import(mockedFixture);
Expand All @@ -603,18 +625,18 @@ test('defaultExports work with CJS mocks in both module systems', async (t) => {
assert.strictEqual(original.string, 'original cjs string');
t.mock.module(fixture, { defaultExport });
assert.strictEqual(require(fixture), defaultExport);
assert.strictEqual((await import(pathToFileURL(fixture))).default, defaultExport);
assert.strictEqual((await import(fixture)).default, defaultExport);
});

test('defaultExports work with ESM mocks in both module systems', async (t) => {
const fixture = fixtures.fileURL('module-mocking', 'basic-esm.mjs');
const fixture = fixtures.path('module-mocking', 'basic-esm.mjs');
const original = await import(fixture);
const defaultExport = Symbol('default');

assert.strictEqual(original.string, 'original esm string');
t.mock.module(`${fixture}`, { defaultExport });
t.mock.module(fixture, { defaultExport });
assert.strictEqual((await import(fixture)).default, defaultExport);
assert.strictEqual(require(fileURLToPath(fixture)), defaultExport);
assert.strictEqual(require(fixture), defaultExport);
});

test('wrong import syntax should throw error after module mocking.', async () => {
Expand Down

0 comments on commit db0e8e2

Please sign in to comment.