Skip to content

Check for @testing-library/jest-dom doesn't guarantee it's safe to use as setupFiles in Vitest #231

Description

@Chudesnov

This check doesn't guarantee that passing '@testing-library/jest-dom/vitest' as setupFiles to Vitest is safe.

The current check:

: ['@testing-library/jest-dom/vitest', '@testing-library/jest-dom/extend-expect'].find(
(path) => {
try {
require.resolve(path);
return true;
} catch (e) {
return false;
}
},
);

only verifies that eslint-plugin-solid itself can resolve @testing-library/jest-dom/vitest.
It does not guarantee that Vitest can safely use it as a setupFiles entry.


Problem

In my project (using pnpm), I hit a false positive:

  • storybook depends directly on @testing-library/jest-dom.
  • storybook-solidjs-vite depends on vite-plugin-solid
  • vite-plugin-solid lists @testing-library/jest-dom as an optional peer dependency.
  • Because of pnpm’s virtual store, both end up colocated such that require.resolve("@testing-library/jest-dom/vitest") from vite-plugin-solid succeeds.

However, my project itself doesn’t depend on @testing-library/jest-dom, since I only use Vitest with vite-plugin-solid for reactivity tests (no DOM tests).

When Vitest parses the config, it can resolve vite-plugin-solid, but it cannot resolve the automatically added @testing-library/jest-dom/vitest import. This breaks the setup.


Minimal Reproduction

  1. Create an empty project
pnpm init
pnpm add -D vitest vite vite-plugin-solid
  1. Add a vitest.config.js with
export default defineConfig({
  plugins: [solid()],
  test: {
    environment: "node",
  },
});

And a simple test file (it should run).

  1. Reinstall dependencies, this time with a transitive dependency on @testing-library/jest-dom:
pnpm add -D storybook storybook-solidjs-vite
  1. Run the test, it should now fail with "Failed to load url .../@testing-library/jest-dom/vitest".

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions