Home

Awesome

jester

A Neovim plugin to easily run and debug Jest tests.

jester

Installation

Requirements: Neovim, nvim-treesitter, for debugging nvim-dap.

Make sure that the JavaScript/TypeScript parser for nvim-treesitter is installed and enabled.

For vim-plug:

Plug 'David-Kunz/jester'

For packer:

use 'David-Kunz/jester'

Usage

Run nearest test(s) under the cursor

:lua require"jester".run()

Run current file

:lua require"jester".run_file()

Run last test(s)

:lua require"jester".run_last()

Debug nearest test(s) under the cursor

:lua require"jester".debug()

Debug current file

:lua require"jester".debug_file()

Debug last test(s)

:lua require"jester".debug_last()

Options

You can specify global options using the setup function.

Example:

require("jester").setup({
  dap = {
    console = "externalTerminal"
  }
})

These are the defaults:

{
  cmd = "jest -t '$result' -- $file", -- run command
  identifiers = {"test", "it"}, -- used to identify tests
  prepend = {"describe"}, -- prepend describe blocks
  expressions = {"call_expression"}, -- tree-sitter object used to scan for tests/describe blocks
  path_to_jest_run = 'jest', -- used to run tests
  path_to_jest_debug = './node_modules/.bin/jest', -- used for debugging
  terminal_cmd = ":vsplit | terminal", -- used to spawn a terminal for running tests, for debugging refer to nvim-dap's config
  dap = { -- debug adapter configuration
    type = 'node2',
    request = 'launch',
    cwd = vim.fn.getcwd(),
    runtimeArgs = {'--inspect-brk', '$path_to_jest', '--no-coverage', '-t', '$result', '--', '$file'},
    args = { '--no-cache' },
    sourceMaps = false,
    protocol = 'inspector',
    skipFiles = {'<node_internals>/**/*.js'},
    console = 'integratedTerminal',
    port = 9229,
    disableOptimisticBPs = true
  }
}

You can also overwrite the options for each function call, for example

:lua require"jester".debug({ dap = { console = "externalTerminal" } })

Tip

Jest usually transforms the files causing breakpoints to be inserted in the wrong line. To prevent this, add this .babelrc file to your project's root:

{
  "retainLines": true,
  "sourceMap": "inline"
}