diff --git a/examples/test-test/esm_only_pkg/main.js b/examples/test-test/esm_only_pkg/main.js new file mode 100644 index 000000000000..c9aacefb2cd1 --- /dev/null +++ b/examples/test-test/esm_only_pkg/main.js @@ -0,0 +1,2 @@ +export default "in_esm_only_pkg"; + diff --git a/examples/test-test/esm_only_pkg/package.json b/examples/test-test/esm_only_pkg/package.json new file mode 100644 index 000000000000..7efeabbe89a5 --- /dev/null +++ b/examples/test-test/esm_only_pkg/package.json @@ -0,0 +1,6 @@ +{ + "name": "esm_only_pkg", + "version": "1.0.0", + "module": "main.js", + "dependencies": {} +} diff --git a/examples/test-test/foo.test.ts b/examples/test-test/foo.test.ts index 5a2039fb0498..3ae84888adcf 100644 --- a/examples/test-test/foo.test.ts +++ b/examples/test-test/foo.test.ts @@ -21,6 +21,7 @@ test('class', () => { return 'foo'; } } + const a = new A(); expect(a.foo()).toEqual('foo'); }); diff --git a/examples/test-test/importEsmOnlyPackage.test.ts b/examples/test-test/importEsmOnlyPackage.test.ts new file mode 100644 index 000000000000..e35da2f7d46c --- /dev/null +++ b/examples/test-test/importEsmOnlyPackage.test.ts @@ -0,0 +1,6 @@ +// @ts-ignore +import x from './esm_only_pkg'; + +test('import from esm only pkg', () => { + expect(x).toEqual('in_esm_only_pkg'); +}); diff --git a/packages/testing/src/index.ts b/packages/testing/src/index.ts index 34d989b0dad5..3d2e1fd7a1fa 100644 --- a/packages/testing/src/index.ts +++ b/packages/testing/src/index.ts @@ -85,6 +85,7 @@ export function createConfig(opts?: { '/packages/.+/fixtures', ], setupFiles: [require.resolve('../setupFiles/shim')], + resolver: require.resolve('./resolver.js'), }; if (opts?.target === 'browser') { config.testEnvironment = 'jsdom'; diff --git a/packages/testing/src/resolver.js b/packages/testing/src/resolver.js new file mode 100644 index 000000000000..acd42dabba02 --- /dev/null +++ b/packages/testing/src/resolver.js @@ -0,0 +1,17 @@ +/* +* reference: https://jestjs.io/docs/configuration#resolver-string +* +* */ +module.exports = (path, options) => { + // Call the defaultResolver, so we leverage its cache, error handling, etc. + return options.defaultResolver(path, { + ...options, + // Use packageFilter to process parsed `package.json` before the resolution (see https://www.npmjs.com/package/resolve#resolveid-opts-cb) + packageFilter: pkg => { + return { + ...pkg, + main: pkg.main || pkg.module, + }; + }, + }); +};