Skip to content

nvim-neotest/neotest-jest

Repository files navigation

neotest-jest

build

This plugin provides a jest adapter for the Neotest framework. Requires at least Neotest version 4.0.0 which in turn requires at least neovim version 0.9.0.

It is currently a work in progress.

Installation

Using packer:

use({
  'nvim-neotest/neotest',
  requires = {
    ...,
    'nvim-neotest/neotest-jest',
  }
  config = function()
    require('neotest').setup({
      ...,
      adapters = {
        require('neotest-jest')({
          jestCommand = "npm test --",
          jestConfigFile = "custom.jest.config.ts",
          env = { CI = true },
          cwd = function(path)
            return vim.fn.getcwd()
          end,
        }),
      }
    })
  end
})

Make sure you have the appropriate treesitter language parsers installed otherwise no tests will be found:

:TSInstall javascript

You might want to install tsx and typescript parser as well depending on your project.

Usage

See neotest's documentation for more information on how to run tests.

Running tests in watch mode

jest allows to run your tests in watch mode. To run test in this mode you either can enable it globally in the setup:

require('neotest').setup({
  ...,
  adapters = {
    require('neotest-jest')({
      jestCommand = require('neotest-jest.jest-util').getJestCommand(vim.fn.expand '%:p:h') .. ' --watch',
    }),
  }
})

or add a specific keymap to run tests with watch mode:

vim.api.nvim_set_keymap("n", "<leader>tw", "<cmd>lua require('neotest').run.run({ jestCommand = 'jest --watch ' })<cr>", {})

Parameterized tests

If you want to allow to neotest-jest to discover parameterized tests you need to enable flag jest_test_discovery in config setup:

require('neotest').setup({
  ...,
  adapters = {
    require('neotest-jest')({
      ...,
      jest_test_discovery = false,
    }),
  }
})

Its also recommended to disable neotest discovery option like this:

require("neotest").setup({
	...,
	discovery = {
		enabled = false,
	},
})

because jest_test_discovery runs jest command on file to determine what tests are inside the file. If discovery would be enabled then neotest-jest would spawn a lot of procesees.

Monorepos

If you have a monorepo setup, you might have to do a little more configuration, especially if you have different jest configurations per package.

jestConfigFile = function(file)
  if string.find(file, "/packages/") then
    return string.match(file, "(.-/[^/]+/)src") .. "jest.config.ts"
  end

  return vim.fn.getcwd() .. "/jest.config.ts"
end,

Also, if your monorepo set up requires you to run a specific test file with cwd on the package directory (like when you have a lerna setup for example), you might also have to tweak things a bit:

cwd = function(file)
  if string.find(file, "/packages/") then
    return string.match(file, "(.-/[^/]+/)src")
  end
  return vim.fn.getcwd()
end

🎁 Contributing

Please raise a PR if you are interested in adding new functionality or fixing any bugs. When submitting a bug, please include an example spec that can be tested.

To run the tests and styling:

  1. Fork this repository.
  2. Make changes.
  3. Make sure tests and styling checks are passing. You will need to install jest and make sure it is available as a command in order to run the tests since it tests parametrized tests which require running a jest command. It should suffice to run npm install in the ./spec directory.
    • Run tests by running ./scripts/test in the root directory. Running the tests requires plenary.nvim. You may need to update the paths in ./tests/init.vim to point to your local installation.
    • Install stylua and check styling using stylua --check lua/ tests/. Omit --check in order to fix styling.
  4. Submit a pull request.
  5. Get it approved.

Bug Reports

Please file any bug reports and I might take a look if time permits otherwise please submit a PR, this plugin is intended to be by the community for the community.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 29

Languages