diff --git a/.changeset/headless-jest-dom-matcher-types.md b/.changeset/headless-jest-dom-matcher-types.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/headless-jest-dom-matcher-types.md @@ -0,0 +1,2 @@ +--- +--- diff --git a/packages/headless/package.json b/packages/headless/package.json index 7d1136cfcac..8a46326ac62 100644 --- a/packages/headless/package.json +++ b/packages/headless/package.json @@ -53,8 +53,9 @@ "scripts": { "build": "rm -rf dist && vite build", "dev": "vite build --watch", - "lint": "eslint src", - "test": "vitest run" + "lint": "eslint src && pnpm typecheck", + "test": "vitest run", + "typecheck": "tsc --noEmit" }, "dependencies": { "@floating-ui/react": "catalog:repo" diff --git a/packages/headless/src/test-utils/jest-dom.d.ts b/packages/headless/src/test-utils/jest-dom.d.ts index 69f12cf866b..7c5aed2b331 100644 --- a/packages/headless/src/test-utils/jest-dom.d.ts +++ b/packages/headless/src/test-utils/jest-dom.d.ts @@ -1,2 +1,17 @@ -import '@testing-library/jest-dom/vitest'; +import 'vitest'; import './vitest-axe'; + +import type { TestingLibraryMatchers } from '@testing-library/jest-dom/matchers'; + +// `@testing-library/jest-dom/vitest` registers its matcher types via a +// triple-slash `/// ` to an internal declaration file, which does not +// reliably apply when re-exported through this package's test setup. Declare the +// `vitest` module augmentation explicitly so `expect(...).toBeInTheDocument()` and +// friends are typed. `import 'vitest'` keeps this file a module augmentation +// rather than an ambient module declaration that would shadow vitest's own types. +declare module 'vitest' { + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + interface Assertion extends TestingLibraryMatchers {} + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + interface AsymmetricMatchersContaining extends TestingLibraryMatchers {} +}