node.js – How do I test a single file using Jest?

The Question :

429 people think this question is useful

I am able to test multiple files using Jest, but I cannot figure out how to test a single file.

I have:

  • Run npm install jest-cli --save-dev
  • Updated package.json: `{ … “scripts”: { “test”: “jest” } … }
  • Written a number of tests.

Running npm test works as expected (currently it runs 14 tests).

How do I test a single file, e.g. test app/foo/__tests__/bar.spec.js?

I have tried running npm test app/foo/__tests__/bar.spec.js (from the project root), but I get the following error:

npm ERR! Error: ENOENT, open ‘/node_modules/app/foo/tests/bar.spec.js/package.json’

The Question Comments :

The Answer 1

386 people think this answer is useful

Since at least 2019:

npm test -- SomeTestFileToRun

In 2015:

In order to run a specific test, you’ll need to use the jest command. npm test will not work. To access jest directly on the command line, install it via npm i -g jest-cli or yarn global add jest-cli.

Then simply run your specific test with jest bar.spec.js.

Note: You don’t have to enter the full path to your test file. The argument is interpreted as a regular expression. Any part of the full path that uniquely identifies a file suffices.

The Answer 2

423 people think this answer is useful

All you have to do is chant the magick incantation:

npm test -- SomeTestFileToRun

The standalone -- is *nix magic for marking the end of options, meaning (for NPM) that everything after that is passed to the command being run, in this case jest. As an aside, you can display Jest usage notes by saying

npm test -- --help

Anyhow, chanting

npm test -- Foo

runs the tests in the named file (FooBar.js). You should note, though, that:

  • Jest treats the name as case-sensitive, so if you’re using a case-insensitive, but case-preserving file system (like Windows NTFS), you might encounter what appears to be oddness going on.

  • Jest appears to treat the specification as a prefix.

So the above incantation will

  • Run FooBar.js, Foo.js and FooZilla.js
  • But not run foo.js

The Answer 3

45 people think this answer is useful

To run an individual test:

npm test -t ValidationUtil # `ValidationUtil` is my module `ValidationUtil.spec.js`

-t – after it, put a regular expression containing the test name.

The Answer 4

24 people think this answer is useful

Using npm test doesn’t mean Jest is installed globally. It just means “test” is mapped to using Jest in your package.json file.

The following is what worked for me, at the root level of the project:

node_modules/.bin/jest [args]

args can be the test file you want to run or the directory containing multiple files.

The Answer 5

21 people think this answer is useful

If you use Yarn, you can add the .spec.js or .test.js file directly after:

yarn test src/lib/myfile.test.js

This is the part from my package.json file with Jest installed as a local package (removed the relevant parts):

{
...
  "scripts": {
    "test": "jest",
    "testw": "jest --watch",
    "testc": "jest --coverage",
...
  },
  "devDependencies": {
    "jest": "^18.1.0",
    ...
  },

}

The Answer 6

19 people think this answer is useful

You could use the file name with npm test --:

npm test -- fileName.jsx 

The Answer 7

7 people think this answer is useful

If you are running npm >= 5.2.0 and you have installed Jest locally as a devDependencies with npm i -d jest, you can run Jest on a particular file by doing npx jest /path/to/your/spec.js.

The Answer 8

6 people think this answer is useful

We are using nrwl-nx with Angular. In this case we can use this command:

npm test <ng-project> -- --testFile "file-name-part"

Notes:

  • npm test will run the test script specified in package.json: "test:client": "ng test client"
  • Thus the rest of the cmd will be passed to ng test
    • <ng-project> is the name of a project in angular.json
      • when you omit this parameter, the "defaultProject" (specified in angular.json) will be used (so you must specify it, when the test is not in your default project)
    • Next we must check which builder is used:
      • In angular.json navigate to "project""<ng-project>""architect""test"
      • and check the "builder", which in our case is: "@nrwl/jest:jest"
    • Now that we know the builder, we need to find the available cmd-line parameters
      • On the command line, run npm test <ng-project> -- --help to see all available options
      • Or check the online documentation
    • One of the options is --testFile which is used here

The Answer 9

4 people think this answer is useful

This is how I dynamically run tests on a specific file without restarting the test.

My React project was created as create-react-app.

So it watches test for changes, automatically running test when I make changes.

So this is what I see at the end of the test results in the terminal:

Test Suites: 16 passed, 16 total
Tests:       98 passed, 98 total
Snapshots:   0 total
Time:        5.048s
Ran all test suites.

Watch Usage: Press w to show more.

Press W

Watch Usage
 › Press f to run only failed tests.
 › Press o to only run tests related to changed files.
 › Press q to quit watch mode.
 › Press p to filter by a filename regex pattern.
 › Press t to filter by a test name regex pattern.
 › Press Enter to trigger a test run.

Then press P

Pattern Mode Usage
 › Press Esc to exit pattern mode.
 › Press Enter to filter by a filenames regex pattern.

 pattern ›

 Start typing to filter by a filename regex pattern.


This is after I wanted to run the ‘index.es6.js’ file in the ‘Login’ folder:

Pattern Mode Usage
 › Press Esc to exit pattern mode.
 › Press Enter to filter by a filenames regex pattern.

 pattern › login/index

 Pattern matches 1 file
 › src/containers/Login/index.es6.test.js

That’s how I run tests on a specific file.

The Answer 10

4 people think this answer is useful

It can also be achieved by:

jest --findRelatedTests path/to/fileA.js

Reference (Jest CLI Options)

How can that be achieved in the Nx monorepo? Here is the answer (in directory /path/to/workspace):

npx nx test api --findRelatedTests=apps/api/src/app/mytest.spec.ts

Reference & more information: How to test a single Jest test file in Nx #6

The Answer 11

1 people think this answer is useful

I just installed Jest as global, ran jest myFileToTest.spec.js, and it worked.

The Answer 12

1 people think this answer is useful

You have two options:

  • Option 1: Command line. You can run the following command

    node '/Users/complete-path-to-you-project/your-project/node_modules/.bin/jest' '/Users/complete-path-to-you-project/your-project/path-to-your-file-within-the-project/your-file.spec.ts'
    
    

    This avoids you to install Jest globally. You use the jest used by your project.

  • Option 2: If you are using Visual Studio Code you have a great plugin to do this: Jest Runner. It allows you not only to run tests file by file, but even specific suites and specs just by a right click on the tests you want to run.

The Answer 13

1 people think this answer is useful

With Angular and Jest you can add this to file package.json under “scripts”:

"test:debug": "node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand"

Then to run a unit test for a specific file you can write this command in your terminal

npm run test:debug modules/myModule/someTest.spec.ts

The Answer 14

1 people think this answer is useful

There isn’t any need to pass the full path. Just use a regular expression pattern.

See –testLocationInResults.

yarn jest --testNamePattern my_test_name
yarn jest -t=auth
yarn jest -t component # This will test all whose test name contains `component`

yarn jest --testPathPattern filename # This will match the file path
yarn jest filename # This will match the file path, the same with above

The Answer 15

1 people think this answer is useful

From Jest documentation

  "scripts": {
    "test": "jest path/to/my-test.js"
  }

Run this with

 npm run test

The Answer 16

0 people think this answer is useful

Jest will use what you pass as a regular expression pattern. That it will match for.

If you want to run a specific test file, then the best way to do it is to use the precise full path to it. (You can too specify a certain relative path like (src/XFolder/index.spec.ts)).

The easiest way to provide the full path being in the directory and in Linux is:

jest $PWD/index.spec.ts

Note the use of the variable $PWD.

Enter image description here

For Windows! (to be updated)

The Answer 17

0 people think this answer is useful
import LoggerService from '../LoggerService ';

describe('Method called****', () => {
  it('00000000', () => {
    const logEvent = jest.spyOn(LoggerService, 'logEvent');
    expect(logEvent).toBeDefined();
  });
});

Usage:

npm test -- __tests__/LoggerService.test.ts -t '00000000'

The Answer 18

0 people think this answer is useful

For nestjs users, the simple alternative is to use,

npm test -t <name of the spec file to run>

Nestjs comes preconfigured with the regex of the test files to search for incase of jest A simple example is –

npm test -t app-util.spec.ts

(that is my spec file name)

The complete path need not be given since jest searches for spec files based on the confuguration which is available by default incase of nestjs

"jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".spec.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

The Answer 19

0 people think this answer is useful

At this time, I did it by using:

yarn test TestFileName.spec.js

You shouldn’t put the complete path. That works for me on a Windows 10 machine.

The Answer 20

-1 people think this answer is useful

“test”: “jest api/ds_server/ds_server.test.js”

Add a Comment