How to Fix the "Cannot Find name 'describe'" Error in TypeScript

Last updated on July 04, 2023
How to Fix the "Cannot Find name 'describe'" Error in TypeScript

To fix the "cannot find name 'describe'" error, install the type definitions for your testing framework, and then add the definitions to the types array in your tsconfig.json file.

This error happens if you try to use the describe() function in a TypeScript file, but type definitions for the package are missing.

The "cannot find name 'describe'" error happening in a TypeScript file in VS Code.
/* 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`. ts(2582) */

describe('example', () => {
  it('adds two numbers together', () => {
    expect(2 + 2).toBe(4);
  });
});


Install the type definitions for the testing framework you're using by running one of the following commands at the root of your project directory.

# 👇 Jest
npm i -D @types/jest jest

# 👇 Mocha
npm i -D @types/mocha mocha

# Yarn
# 👇 Jest
yarn add --dev @types/jest jest

# 👇 Mocha
yarn add --dev @types/mocha mocha

Every Crazy Thing JavaScript Does

Every Crazy Thing JavaScript Does
Avoid painful bugs and save valuable time with Every Crazy Thing JavaScript Does, a captivating guide to the subtle caveats and lesser-known parts of JavaScript.

Add typings to types array in tsconfig.json

In some cases, this is all you need to fix the error. But if it persists, you might need to add the newly installed typings to the types array of your tsconfig.json file.

So if you're using Jest, you'll add a jest string to the types array, and then your tsconfig.json file will look something like this:

{
  "compilerOptions": {
    "types": [
      // ... other types
      "jest"
    ]
    // ..other settings
  }
}

If you're using Mocha too, you'll add a mocha string to the types array.

{
  "compilerOptions": {
    "types": [
      // ... other types
      "mocha"
    ]
    // ..other settings
  }
}

Include test files

If the error still doesn't go away after doing this, make sure that TypeScript is not ignoring the directory containing your test files.

If you've set the include array in your tsconfig.json file, make sure the patterns specified in this array match the directory where your test files are located.

For example, if your test files are located in a src directory, TypeScript will detect them with a configuration like this:

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

But if they're located in a tests directory, we'll need to add an additional glob pattern to make TypeScript detect them:

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

We can also include glob patterns to match files with a specific ending or extension.

For example, we can include all files ending with .spec.ts and .test.ts with this config:

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

If you've set the exclude array in your tsconfig.json file, make sure that none of the patterns in the array match the directory containing the test files, as this will prevent TypeScript from detecting them.

For example, in the tsconfig.json file below, files ending with .spec.ts have been excluded, so TypeScript will ignore them and the error will occur when you attempt to use describe() in them.

{
  "compilerOptions": {},
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "**/*.test.ts"
  ],
}

We'll fix this issue by simply moving the pattern string from exclude to include:

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

Import module in file

Instead of adding the typings to the types array, you can also import them at the top of the file where you are using describe().

So if we're using Jest, we'll add an import 'jest' line at the beginning of the file.

// 👇
import 'jest';

// ✅ No error
describe('example', () => {
  it('adds two numbers together', () => {
    expect(2 + 2).toBe(4);
  });
});


If we're also using Mocha, we'll add an import 'mocha' line:

// 👇
import 'mocha';

// ✅ No error
describe('example', () => {
  it('adds two numbers together', () => {
    expect(2 + 2).toBe(4);
  });
});


Restart IDE

If the error persists after doing all of this, restarting your IDE might help.

11 Amazing New Features in ES13

11 Amazing New Features in ES13
Get up to speed with all the latest features added in ECMAScript 13 to modernize your JavaScript with shorter and more expressive code.

See also