jestjs – How do I run a single test using Jest?

jestjs – How do I run a single test using Jest?

From the command line, use the --testNamePattern or -t flag:

jest -t fix-order-test

This will only run tests that match the test name pattern you provide. Its in the Jest documentation.

Another way is to run tests in watch mode, jest --watch, and then press P to filter the tests by typing the test file name or T to run a single test name.


If you have an it inside of a describe block, you have to run

jest -t <describeString> <itString>

Jest documentation recommends the following:

If a test is failing, one of the first things to check should be
whether the test is failing when its the only test that runs. In Jest
its simple to run only one test – just temporarily change that test
command to a test.only

test.only(this will be the only test that runs, () => {
   expect(true).toBe(false);
});

or

it.only(this will be the only test that runs, () => {
   expect(true).toBe(false);
});

jestjs – How do I run a single test using Jest?

Full command to run a single Jest test

Command:

node <path-to-jest> -i <you-test-file> -c <jest-config> -t <test-block-name>

  • <path-to-jest>:
    • Windows: node_modulesjestbinjest.js
    • Others: node_modules/.bin/jest
  • -i <you-test-file>: path to the file with tests (js or ts)
  • -c <jest-config>: path to a separate Jest config file (JSON), if you keep your Jest configuration in package.json, you dont have to specify this parameter (Jest will find it without your help)
  • -t <the-name-of-test-block>: actually its a name (the first parameter) of describe(...), it(...), or test(...) block.

Example:

describe(math tests, () => {

  it(1 + 1 = 2, () => {
    expect(1 + 1).toBe(2);
  });

  it(-1 * -1 !== -1, () => {
    expect(-1 * -1).not.toBe(-1);
  });

});

So, the command

node node_modules/jest/bin/jest.js -i test/math-tests.js -c test/tests-config.json -t 1 + 1 = 2

will test it(1 + 1 = 2, ...), but if you change the -t parameter to math tests then it will run both tests from the describe(math tests,...) block.

Remarks:

  1. For Windows, replace node_modules/.bin/jest with node_modulesjestbinjest.js.
  2. This approach allows you to debug the running script. To enable debugging add --inspect-brk parameter to the command.

Running a single Jest test via NPM scripts in package.json

Having Jest installed, you can simplify the syntax of this command (above) by using NPM scripts. In package.json add a new script to the scripts section:

scripts: {
  test:math: jest -i test/my-tests.js -t math tests,
}

In this case, we use an alias jest instead of writing the full path to it. Also, we dont specify the configuration file path since we can place it in package.json as well and Jest will look into it by default. Now you can run the command:

npm run test:math

And the math tests block with two tests will be executed. Or, of course, you can specify one particular test by its name.

Another option would be to pull the <the-name-of-test-block> parameter outside the test:math script and pass it from the NPM command:

package.json:

scripts: {
  test:math: jest -i test/my-tests.js -t,
}

Command:

npm run test:math math tests

Now you can manage the name of the run test(s) with a much shorter command.

Remarks:

  1. The jest command will work with NPM scripts because

npm makes ./node_modules/.bin the first entry in the PATH environment variable when running any lifecycle scripts, so this will work fine, even if your program is not globally installed (NPM blog)
2. This approach doesnt seem to allow debugging because Jest is run via its binary/CLI, not via node.


Running a selected Jest test in Visual Studio Code

If you are using Visual Studio Code you can take advantage of it and run the currently selected test (in the code editor) by pressing the F5 button. To do this, we will need to create a new launch configuration block in the .vscode/launch.json file. In that configuration, we will use predefined variables which are substituted with the appropriate (unfortunately not always) values when running. Of all available we are only interested in these:

  • ${relativeFile} – the current opened file relative to
    ${workspaceFolder}
  • ${selectedText} – the current selected text in the active file

But before writing out the launch configuration we should add the test script in our package.json (if we havent done it yet).

File package.json:

scripts: {
  test: jest
}

Then we can use it in our launch configuration.

Launch configuration:

{
  type: node,
  request: launch,
  name: Run selected Jest test,
  runtimeExecutable: npm,
  runtimeArgs: [
    run-script,
    test
  ],
  args: [
    --,
    -i,
    ${relativeFile},
    -t,
    ${selectedText}
  ],
  console: integratedTerminal,
}

It actually does the same as the commands described earlier in this answer. Now that everything is ready, we can run any test we want without having to rewrite the command parameters manually.

Heres all you need to do:

  1. Select currently created launch config in the debug panel:

    Select

  2. Open the file with tests in the code editor and select the name of the test you want to test (without quotation marks):

    Select

  3. Press F5 button.

And voilĂ !

Now to run any test you want. Just open it in the editor, select its name, and press F5.

Unfortunately, it wont be voilĂ  on a Windows machines because they substitute (who knows why) the ${relativeFile} variable with the path having reversed slashes and Jest wouldnt understand such a path.
(In case if the command needs troubleshooting, see similar approach in https://www.basefactor.com/using-visual-studio-code-to-debug-jest-based-unit-tests)

Remarks:

  1. To run under the debugger, dont forget to add the --inspect-brk parameter.
  2. In this configuration example, we dont have the Jest configuration parameter assuming that its included in package.json.

Leave a Reply

Your email address will not be published.