[Sovled] Jest error Cannot find name 'it' in TypeScript

avatar

Borislav Hadzhiev

Last updated: Mar 13, 2022

banner

Photo from Unsplash

[Sovled] Jest error Cannot find name 'it' in TypeScript #

To solve the "Cannot find name 'it'" jest error, make sure to install the typings for jest - npm i -D @types/jest and add them to the types array in your tsconfig.json file. TypeScript has to be picking up the directory in which your tests are located.

cannot find name it jest

Here is an example of how the error occurs.

index.ts
// Cannot find name 'it'. Do you need to install // type definitions for a test runner? Try // `npm i --save-dev @types/jest` or // `npm i --save-dev @types/mocha` and then add // 'jest' or 'mocha' to the types field in your tsconfig.ts(2593) describe('example', () => { it('does work', () => { expect('hello').toBe('hello'); }); });

Open your terminal in the root directory of your project and install the typings for jest.

shell
npm i -D @types/jest ts-jest jest

Once the typings are installed, you have to add them to the types array in your tsconfig.json file.

This should be what your types array looks like.

tsconfig.json
{ "compilerOptions": { "types": [ "reflect-metadata", "jest", // ... your other types ], // ... your other settings } }

If the error is still not resolved, make sure that TypeScript is picking up the directory in which your tests are located. If you've set the include array in your tsconfig.json file, it should also include the directory in which your tests are.

For example, if your tests are in an src directory, the following config is fine:

tsconfig.json
{ "compilerOptions": {}, "include": ["src/**/*"], }

However, if your tests are in a tests directory next to your src directory, TypeScript won't pick them up with the config above.

tsconfig.json
{ "compilerOptions": {}, "include": [ "src/**/*", "tests/**/*" ], }

You can also use glob patterns. Here is an example that includes files ending in .spec.ts and .test.ts.

tsconfig.json
{ "compilerOptions": {}, "include": [ "src/**/*", "**/*.spec.ts", "**/*.test.ts" ], }

The example above makes sure to also include your test files in your project. If you need a way to exclude your test files from compilation, but still have them type checked, check out my other article - Exclude test files from Compilation in TypeScript.

If the error persists and your runtime is Node.js, make sure to install the typings for node, by opening your terminal in your project's root directory and running the following command:

shell
npm i -D @types/node

Also if running your code using Node.js, make sure the types array in your tsconfig.json file contains "node".

tsconfig.json
{ "compilerOptions": { "types": [ // ... your other types "node" ], }, }

If the error is not resolved, try to delete your node_modules and package-lock.json files, re-run npm install and restart your IDE.

shell
rm -rf node_modules package-lock.json npm install

Make sure to restart your IDE if the error persists. VSCode glitches often and a reboot solves things sometimes.

Conclusion #

To solve the "Cannot find name 'it'" jest error, make sure to install the typings for jest - npm i -D @types/jest and add them to the types array in your tsconfig.json file. TypeScript has to be picking up the directory in which your tests are located.

I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
book cover
You can use the search field on my Home Page to filter through all of my articles.