testing-library / jest-dom

:owl: Custom jest matchers to test the state of the DOM
https://testing-library.com/docs/ecosystem-jest-dom
MIT License
4.39k stars 392 forks source link

Property 'toHaveTextContent' does not exist on type 'Assertion<HTMLElement>'. #620

Open drichar opened 1 month ago

drichar commented 1 month ago

Relevant code or config:

describe('ellipseAddressJsx', () => {
  it('should return ellipsed address with specified width', () => {
    const address = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
    const width = 4

    const { container } = render(ellipseAddressJsx(address, width))

    expect(container).toHaveTextContent('aaaa…aaaa')
  })
})

What you did:

Upgraded from vitest 2.0.3 from 2.0.4

What happened:

After upgrading to vitest@2.0.4 this TypeScript error appeared in every @testing-library/jest-dom assertion:

image

Reproduction:

https://codesandbox.io/p/devbox/silly-panna-vx86jv

See src/utils.test.tsx

Problem description:

Following the instructions for using @testing-library/jest-dom with Vitest provided here no longer seems to work in the latest version of Vitest. (Confirmed this is also the case for vitest@2.0.5)

Suggested solution:

As suggested here: https://github.com/testing-library/jest-dom/issues/546#issuecomment-1800436478

In tsconfig.json:

{
  "compilerOptions": {
    "types": ["@testing-library/jest-dom"]
  },
}

This resolves the issue.

gnapse commented 1 month ago

Does https://github.com/testing-library/jest-dom/pull/621 fix the problem? If I understand correctly, this is something that consumers of the library would need to do in their own repos, so all we can do is document this in the README, right?

andykenward commented 1 month ago

Instead of changing your "types", add your vitest.setup.ts file to the "include" array in your tsconfig.json.

tsconfig.json

{
  ...
  "include": ["src", "vitest.setup.ts"],
}

See With TypeScript in the jest-dom README.md, which uses "./jest-setup.ts" in the example.

With TypeScript

If you're using TypeScript, make sure your setup file is a .ts and not a .js to include the necessary types.

You will also need to include your setup file in your tsconfig.json if you haven't already:

  // In tsconfig.json
  "include": [
    ...
    "./jest-setup.ts"
  ],
gnapse commented 1 month ago

Can you make a review of that PR and request/suggest changes?