204 lines
6.1 KiB
Lua
204 lines
6.1 KiB
Lua
local jest = require("test-samurai.runners.js-jest")
|
|
local mocha = require("test-samurai.runners.js-mocha")
|
|
local vitest = require("test-samurai.runners.js-vitest")
|
|
local util = require("test-samurai.util")
|
|
|
|
describe("test-samurai js runner (jest)", function()
|
|
it("detects JS/TS test files by name and filetype", function()
|
|
local bufnr1 = vim.api.nvim_create_buf(false, true)
|
|
vim.api.nvim_buf_set_name(bufnr1, "/tmp/foo_detect.test.ts")
|
|
vim.bo[bufnr1].filetype = "typescript"
|
|
assert.is_true(jest.is_test_file(bufnr1))
|
|
|
|
local bufnr2 = vim.api.nvim_create_buf(false, true)
|
|
vim.api.nvim_buf_set_name(bufnr2, "/tmp/foo_detect.ts")
|
|
vim.bo[bufnr2].filetype = "typescript"
|
|
assert.is_false(jest.is_test_file(bufnr2))
|
|
end)
|
|
|
|
it("finds nearest it() call as test name and builds full_name when cursor is inside the test", function()
|
|
local bufnr = vim.api.nvim_create_buf(false, true)
|
|
vim.api.nvim_buf_set_name(bufnr, "/tmp/foo_nearest.test.ts")
|
|
vim.bo[bufnr].filetype = "typescript"
|
|
local lines = {
|
|
'describe("outer", function() {',
|
|
' it("inner 1", function() {',
|
|
" -- inside 1",
|
|
" })",
|
|
"",
|
|
' it("inner 2", function() {',
|
|
" -- inside 2",
|
|
" })",
|
|
"})",
|
|
}
|
|
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines)
|
|
|
|
local orig_fs_find = vim.fs.find
|
|
vim.fs.find = function(names, opts)
|
|
return { "/tmp/package.json" }
|
|
end
|
|
|
|
local row_inside_second = 6
|
|
local spec, err = jest.find_nearest(bufnr, row_inside_second, 0)
|
|
|
|
vim.fs.find = orig_fs_find
|
|
|
|
assert.is_nil(err)
|
|
assert.is_not_nil(spec)
|
|
assert.equals("inner 2", spec.test_name)
|
|
assert.equals("outer inner 2", spec.full_name)
|
|
assert.equals("jest", spec.framework)
|
|
assert.is_true(spec.file:match("foo_nearest%.test%.ts$") ~= nil)
|
|
assert.is_true(spec.cwd:match("tmp$") ~= nil)
|
|
|
|
local cmd_spec = jest.build_command(spec)
|
|
assert.are.same({ "npx", "jest", "--json", spec.file, "-t", "inner 2" }, cmd_spec.cmd)
|
|
end)
|
|
|
|
it("returns describe block when cursor is between it() calls", function()
|
|
local bufnr = vim.api.nvim_create_buf(false, true)
|
|
vim.api.nvim_buf_set_name(bufnr, "/tmp/foo_between.test.ts")
|
|
vim.bo[bufnr].filetype = "typescript"
|
|
local lines = {
|
|
'describe("outer", function() {',
|
|
' it("inner 1", function() {',
|
|
" -- inside 1",
|
|
" })",
|
|
"",
|
|
' it("inner 2", function() {',
|
|
" -- inside 2",
|
|
" })",
|
|
"})",
|
|
}
|
|
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines)
|
|
|
|
local orig_fs_find = vim.fs.find
|
|
vim.fs.find = function(names, opts)
|
|
return { "/tmp/package.json" }
|
|
end
|
|
|
|
local row_between = 4
|
|
local spec, err = jest.find_nearest(bufnr, row_between, 0)
|
|
|
|
vim.fs.find = orig_fs_find
|
|
|
|
assert.is_nil(err)
|
|
assert.is_not_nil(spec)
|
|
assert.equals("outer", spec.test_name)
|
|
assert.equals("outer", spec.full_name)
|
|
assert.equals("jest", spec.framework)
|
|
end)
|
|
|
|
it("treats jest.config in test/.bin as project root parent", function()
|
|
local bufnr = vim.api.nvim_create_buf(false, true)
|
|
vim.api.nvim_buf_set_name(bufnr, "/tmp/foo_binroot.test.ts")
|
|
vim.bo[bufnr].filetype = "typescript"
|
|
local lines = {
|
|
'describe("outer", function() {',
|
|
' it("inner 1", function() {',
|
|
" -- inside 1",
|
|
" })",
|
|
"",
|
|
' it("inner 2", function() {',
|
|
" -- inside 2",
|
|
" })",
|
|
"})",
|
|
}
|
|
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines)
|
|
|
|
local orig_fs_find = vim.fs.find
|
|
vim.fs.find = function(names, opts)
|
|
return { "/tmp/test/.bin/jest.config.js" }
|
|
end
|
|
|
|
local row_inside_second = 6
|
|
local spec, err = jest.find_nearest(bufnr, row_inside_second, 0)
|
|
|
|
vim.fs.find = orig_fs_find
|
|
|
|
assert.is_nil(err)
|
|
assert.is_not_nil(spec)
|
|
assert.equals("/tmp", spec.cwd)
|
|
end)
|
|
end)
|
|
|
|
describe("test-samurai js runner (mocha)", function()
|
|
it("builds mocha command with fgrep and full test title", function()
|
|
local spec = {
|
|
file = "/tmp/project/test/foo_nearest.test.ts",
|
|
cwd = "/tmp/project",
|
|
test_name = "inner 2",
|
|
full_name = "outer inner 2",
|
|
}
|
|
|
|
local cmd_spec = mocha.build_command(spec)
|
|
|
|
assert.are.same(
|
|
{ "npx", "mocha", "--reporter", "json-stream", "--fgrep", "outer inner 2", spec.file },
|
|
cmd_spec.cmd
|
|
)
|
|
assert.equals("/tmp/project", cmd_spec.cwd)
|
|
end)
|
|
|
|
it("builds mocha all command with default glob", function()
|
|
local bufnr = vim.api.nvim_create_buf(false, true)
|
|
vim.api.nvim_buf_set_name(bufnr, "/tmp/project/test/foo_all.test.js")
|
|
vim.bo[bufnr].filetype = "javascript"
|
|
|
|
local orig_find_root = util.find_root
|
|
util.find_root = function(path, markers)
|
|
return "/tmp/project"
|
|
end
|
|
|
|
local cmd_spec = mocha.build_all_command(bufnr)
|
|
|
|
util.find_root = orig_find_root
|
|
|
|
assert.are.same(
|
|
{ "npx", "mocha", "--reporter", "json-stream", "test/**/*.test.js" },
|
|
cmd_spec.cmd
|
|
)
|
|
assert.equals("/tmp/project", cmd_spec.cwd)
|
|
end)
|
|
end)
|
|
|
|
describe("test-samurai js runner (vitest)", function()
|
|
it("builds vitest command with tap-flat reporter", function()
|
|
local spec = {
|
|
file = "/tmp/project/test/foo_nearest.test.ts",
|
|
cwd = "/tmp/project",
|
|
test_name = "inner 2",
|
|
full_name = "outer inner 2",
|
|
}
|
|
|
|
local cmd_spec = vitest.build_command(spec)
|
|
|
|
assert.are.same(
|
|
{ "npx", "vitest", "--reporter", "tap-flat", spec.file, "-t", "inner 2" },
|
|
cmd_spec.cmd
|
|
)
|
|
assert.equals("/tmp/project", cmd_spec.cwd)
|
|
end)
|
|
|
|
it("builds vitest all command with tap-flat reporter", function()
|
|
local bufnr = vim.api.nvim_create_buf(false, true)
|
|
vim.api.nvim_buf_set_name(bufnr, "/tmp/project/test/foo_all.test.ts")
|
|
vim.bo[bufnr].filetype = "typescript"
|
|
|
|
local orig_find_root = util.find_root
|
|
util.find_root = function(path, markers)
|
|
return "/tmp/project"
|
|
end
|
|
|
|
local cmd_spec = vitest.build_all_command(bufnr)
|
|
|
|
util.find_root = orig_find_root
|
|
|
|
assert.are.same(
|
|
{ "npx", "vitest", "--reporter", "tap-flat" },
|
|
cmd_spec.cmd
|
|
)
|
|
assert.equals("/tmp/project", cmd_spec.cwd)
|
|
end)
|
|
end)
|