local jest = require("test-samurai.runners.js-jest") local mocha = require("test-samurai.runners.js-mocha") 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", 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", "--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", "test/**/*.test.js" }, cmd_spec.cmd ) assert.equals("/tmp/project", cmd_spec.cwd) end) end)