jest-dom: Property 'toBeInTheDocument' does not exist on type 'JestMatchers'
@testing-library/jest-dom
version: 6.1.4node
version: 18.17.1jest
version: 29.7.0npm
version: 10.2.0
Other dependencies:
Relevant code or config:
import { render, screen } from "@testing-library/react";
import Home from "@/app/page";
it("should have Docs text", () => {
render(<Home />);
const myElement = screen.getByText("Docs");
expect(myElement).toBeInTheDocument();
});
What you did:
I was following a Next.js Testing tutorial by Dave Gray to learn more about React Testing. I followed the tutorial until the 17-minute mark where the error occurred.
What happened:
This is the error:
Reproduction:
The steps from the beginning until the 17th-minute mark of the tutorial will give the error.
Problem description:
Property ‘toBeInTheDocument’ does not exist on type ‘JestMatchers<HTMLElement>’. It seems that it has something to do either with TypeScript, or the Nextjs 14, or with the latest release of testing-library/jest-dom
Suggested solution:
The only solution, which seems temporary, is to roll back to an older version like 5.16.5 or 5.17. This solves the problem.
About this issue
- Original URL
- State: open
- Created 8 months ago
- Reactions: 12
- Comments: 22
Commits related to this issue
- Docs: Add App Router Testing Guides and update /examples (#59268) This PR updates the testing guides to use App Router and TypeScript, also updates `/examples` to show `app` and `pages` examples. ... — committed to vercel/next.js by delbaoliveira 7 months ago
- Docs: Add App Router Testing Guides and update /examples (#59268) This PR updates the testing guides to use App Router and TypeScript, also updates `/examples` to show `app` and `pages` examples. ... — committed to agustints/next.js by delbaoliveira 7 months ago
- ✅ test(ts): fix @testing-library/jest-dom type definitions not showing up see testing-library/jest-dom#546 — committed to m-tartari/m-tartari.github.io by m-tartari 5 months ago
- ✅ test(ts): fix @testing-library/jest-dom type definitions not showing up see testing-library/jest-dom#546 — committed to m-tartari/m-tartari.github.io by m-tartari 5 months ago
- ✅ test(ts): fix @testing-library/jest-dom type definitions not showing up see testing-library/jest-dom#546 — committed to m-tartari/m-tartari.github.io by m-tartari 5 months ago
I’ve come across the issue you’re experiencing and I believe I have a solution that might help you.
If you add the following line to your
tsconfig.json
undercompilerOptions
:This will inform TypeScript to include the type definitions from @testing-library/jest-dom, which should resolve the type errors you’re seeing.
For me the following seems to be solving the issue:
setupAfterEnv.ts
Update:
Eh maybe it is flaky because after a couple of TS server restarts now it does not work … Anyway maybe this is not the correct solution then.
since this is one of the main google hits, I thought I’d share what the solution is. There are two problems: 1. jest-dom 5.x doesn’t have TS types and 2. expect needs to be extended.
First, we’ll uninstall jest-dom and install a 4.x version:
You can use the analogous npm commands instead of yarn.
Then, add this to
src/setupTests.ts
:Doing these two things alone worked for me.
BTW, I stumbled upon this while following a tutorial that was based off of create-react-app, using the command
yarn create react-app myname --template typescript
.import '@testing-library/jest-dom';
is the only thing working for me, but I have to do it in every test file 👎in my case replacing import with require helped (all other fixes suggested above were already implemented and didn’t help)
const { expect, describe, it } = require('@jest/globals');
That works for me
Create/update
jest.setup.ts
:Update
jest.config.ts
:Add type definitions in
tsconfig.json
:The comment above by @Noyabronok has pointed me in the right direction. Thanks.
I had
"src/**/*.test.tsx"
in the"exclude"
array in my tsconfig.json for some reason 🤦 .Removing this seems to have resolved the issue in VS Code for me now.
As this is still alive at this date i have to say what just worked for me right now. I updated @testing-library/jest-dom to the latest and in the jest setup file instead of importing it as
import '@testing-library/jest-dom/extend-expect';
, I imported it now as thisimport '@testing-library/jest-dom/jest-globals';
The way i use the jest functions in typescript is doing explicit imports like
import { describe, expect, test } from '@jest/globals';
from the also required package@jest/globals
https://jestjs.io/docs/getting-started#type-definitions https://github.com/testing-library/jest-dom/releases/tag/v6.0.0
i couldn’t get it working with
@types/jest
but i dont care about it, i rather use@jest/globals
.Thanks bro it worked, none of the solutions were working
Adding
compilerOptions: { "types": ["@testing-library/jest-dom"] }
intsconfig.json
didn’t work for me because it overrides my existing"typeRoots"
.The only solution I’ve found is adding
import "@testing-library/jest-dom";
to every test file, which is a bummer.Update: I was able to resolve this!
If, like me, you are configuring
typeRoots
intsconfig.json
and the above solution using thetypes
property doesn’t work for you, you can instead updatetypeRoots
:Better is just point ts compiler to
setupTests.ts
file with import to@testing-library/jest-dom
by adding it to tsconfig.jsoninclude
option.checkout this comment https://github.com/nrwl/nx/issues/9140#issuecomment-1200073153 btw there is no need to install
@types/testing-library__jest-dom
in first stepWoohoo, I got the
compilerOptions: { "types": ["@testing-library/jest-dom"] }
intsconfig.json
change working!tsconfig file needed the following change:
from:
to:
Appears that only files at the root or
src
directory were having tsconfig changes applied.This took care of VSCode error. Unfortunately I still needed
import '@testing-library/jest-dom'
in myjest-setup.tsx
file to remove the error from test runsI just downgraded from jest-dom 6.x to 5.x and everything is green again.
So I have this import inside of my
setupTests.ts
:import "@testing-library/jest-dom";
And when I have the setupTests.ts files actually open in my IDE, it’s all good. No complaints. Now when I close the setupTests.ts file, my IDE starts complaining that
inTheDocument()
doesn’t exist on JestMatchers… And then when I open setupTests.ts again, it’s all good and dandy. Anybody else had this problem?The only solution that as work with me (I’m using Nextjs 14.0.3) is to modify the
tsconfig.json
and add:"types": ["@testing-library/jest-
tocompilerOptions
That’s pretty good. It has to be added to the config file after installing the library.