Some of the accepted answers were basically right but some may be slightly outdated:
Some references that are good for now:
Here are the full things you need:
- in the project's
<rootDir>
(aka where package.json
and jest.config.js
are), make sure you have a file called jest.config.js
so that Jest can automatically pick it up for configuration. The file is in JS but is structured similarly to a package.json.
- Make sure you input the following:
module.exports = {
testPathIgnorePatterns: ['<rootDir>/node_modules', '<rootDir>/dist'], // might want?
moduleNameMapper: {
'@components(.*)': '<rootDir>/src/components$1' // might want?
},
moduleDirectories: ['<rootDir>/node_modules', '<rootDir>/src'],
setupFilesAfterEnv: ['<rootDir>/src/jest-setup.ts'] // this is the KEY
// note it should be in the top level of the exported object.
};
Also, note that if you're using typescript you will need to make sure your jest-setup.ts
file is compiled (so add it to src
or to the list of items to compile in your tsconfig.json
.
At the top of jest-setup.ts/js
(or whatever you want to name this entrypoint) file: add import '@testing-library/jest-dom';
.
You may also want to make sure it actually runs so put a console.log('hello, world!');
. You also have the opportunity to add any global functions you'd like to have available in jest such as (global.fetch = jest.fn()
).
Now you actually have to install @testing-library/jest-dom
: npm i -D @testing-library/jest-dom
in the console.
With those steps you should be ready to use jest-dom:
Without TS: you still need:
npm i -D @testing-library/jest-dom
- Creating a
jest.config.js
and adding to it a minimum of: module.exports = { setupFilesAfterEnv: ['<rootDir>/[path-to-file]/jest-setup.js'] }
.
- Creating a
[path-to-file]/jest-setup.js
and adding to it: import '@testing-library/jest-dom';
.
The jest-setup file is also a great place to configure tests like creating a special renderWithProvider(
function or setting up global window functions.
ts-jest
withoutbabel-jest
and nothing works. I hope it will help: https://mcmap.net/q/120594/-property-39-tobeinthedocument-39-does-not-exist-on-type-39-matchers-lt-any-gt-39 – Thrasher