2022-07-29 08:42:55 +00:00
|
|
|
import { spawnPromisified } from '../common/index.mjs';
|
|
|
|
import * as fixtures from '../common/fixtures.mjs';
|
|
|
|
import assert from 'node:assert';
|
|
|
|
import { execPath } from 'node:process';
|
|
|
|
import { describe, it } from 'node:test';
|
2022-01-06 11:07:52 +00:00
|
|
|
|
2022-07-29 08:42:55 +00:00
|
|
|
|
|
|
|
const importStatement = 'import { foo, notfound } from \'./module-named-exports.mjs\';';
|
2022-01-06 11:07:52 +00:00
|
|
|
const importStatementMultiline = `import {
|
|
|
|
foo,
|
|
|
|
notfound
|
|
|
|
} from './module-named-exports.mjs';
|
|
|
|
`;
|
|
|
|
|
2024-03-23 21:11:28 +00:00
|
|
|
describe('ESM: nonexistent exports', { concurrency: !process.env.TEST_PARALLEL }, () => {
|
2022-07-29 08:42:55 +00:00
|
|
|
for (
|
|
|
|
const { name, input }
|
|
|
|
of [
|
|
|
|
{
|
|
|
|
input: importStatement,
|
|
|
|
name: 'single-line import',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
input: importStatementMultiline,
|
|
|
|
name: 'multi-line import',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
) {
|
|
|
|
it(`should throw for nonexistent exports via ${name}`, async () => {
|
|
|
|
const { code, stderr } = await spawnPromisified(execPath, [
|
|
|
|
'--input-type=module',
|
|
|
|
'--eval',
|
|
|
|
input,
|
|
|
|
], {
|
|
|
|
cwd: fixtures.path('es-module-loaders'),
|
|
|
|
});
|
2022-01-06 11:07:52 +00:00
|
|
|
|
2022-07-29 08:42:55 +00:00
|
|
|
assert.notStrictEqual(code, 0);
|
2022-01-06 11:07:52 +00:00
|
|
|
|
2022-07-29 08:42:55 +00:00
|
|
|
// SyntaxError: The requested module './module-named-exports.mjs'
|
|
|
|
// does not provide an export named 'notfound'
|
|
|
|
assert.match(stderr, /SyntaxError:/);
|
|
|
|
// The quotes ensure that the path starts with ./ and not ../
|
|
|
|
assert.match(stderr, /'\.\/module-named-exports\.mjs'/);
|
|
|
|
assert.match(stderr, /notfound/);
|
|
|
|
});
|
|
|
|
}
|
2022-01-06 11:07:52 +00:00
|
|
|
});
|