From e931b9cd0abcad84da735bf18d9a218e7581f04e Mon Sep 17 00:00:00 2001 From: Fredrik Averpil Date: Mon, 22 Jul 2024 21:37:26 +0200 Subject: [PATCH] feat: gotestsum --- README.md | 51 +++++++++++++++++++++++++++++----- lua/neotest-golang/health.lua | 3 ++ lua/neotest-golang/options.lua | 4 +-- tests/unit/options_spec.lua | 8 +++--- 4 files changed, 53 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index df50a6eb..1afd5962 100644 --- a/README.md +++ b/README.md @@ -75,13 +75,15 @@ You can run `:checkhealth neotest-golang` to review common issues. ## ⚙️ Configuration -| Argument | Default value | Description | -| ------------------------ | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `go_test_args` | `{ "-v", "-race", "-count=1" }` | Arguments to pass into `go test`. | -| `dap_go_opts` | `{}` | Options to pass into `require("dap-go").setup()`. | -| `testify_enabled` | `false` | Enable support for [testify](https://github.com/stretchr/testify) suites. See [here](https://github.com/fredrikaverpil/neotest-golang#testify-suites) for more info. | -| `warn_test_name_dupes` | `true` | Warn about duplicate test names within the same Go package. | -| `warn_test_not_executed` | `true` | Warn if test was not executed. | +| Argument | Default value | Description | +| ------------------------ | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `runner` | `go` | Defines the test runner. Valid values: `go` or `gotestsum`. | +| `go_test_args` | `{ "-v", "-race", "-count=1" }` | Arguments to pass into `go test`. | +| `gotestsum_args` | `{ "--format=standard-verbose" }` | Arguments to pass into `gotestsum`. Will only be used if `runner = "gotestsum"`. Note that `go_test_args` still applies. | +| `dap_go_opts` | `{}` | Options to pass into `require("dap-go").setup()`. | +| `testify_enabled` | `false` | Enable support for [testify](https://github.com/stretchr/testify) suites. See [here](https://github.com/fredrikaverpil/neotest-golang#testify-suites) for more info. | +| `warn_test_name_dupes` | `true` | Warn about duplicate test names within the same Go package. | +| `warn_test_not_executed` | `true` | Warn if test was not executed. | ### Example configuration: custom `go test` arguments @@ -170,6 +172,41 @@ return { } ``` +### Use `gotestsum` as test runner + +To improve reliability, you can choose to run tests using +[`gotestsum`](https://github.com/gotestyourself/gotestsum) as the test runner. +This tool allows you to use one format for stdout while simultaneously writing +test output to a JSON file. `gotestsum` actually calls `go test` behind the +scenes, so your `go_test_args` configuration remains valid and will still apply. +Using `gotestsum` offers the following benefits: + +- When you "attach" to a running test, you'll see clean `go test` output instead + of having to navigate through difficult-to-read JSON. +- On certain platforms or terminals, there's a risk of ANSI codes or other + characters being seemingly randomly inserted into the JSON test output. This + can corrupt the data and cause problems with JSON decoding. Enabling + `gotestsum` eliminates these issues. + +First install it: + +```bash +go install gotest.tools/gotestsum@latest +``` + +Then add the required configuration: + +```lua +local config = { -- Specify configuration + runner = "gotestsum" +} +require("neotest").setup({ + adapters = { + require("neotest-golang")(config), -- Apply configuration + }, +}) +``` + ### Example configuration: extra everything
diff --git a/lua/neotest-golang/health.lua b/lua/neotest-golang/health.lua index b5972af5..29f22343 100644 --- a/lua/neotest-golang/health.lua +++ b/lua/neotest-golang/health.lua @@ -24,6 +24,9 @@ function M.check() M.is_plugin_available("dap") M.is_plugin_available("dapui") M.is_plugin_available("dap-go") + + start("Gotestsum (optional)") + M.binary_found_on_path("gotestsum") end function M.binary_found_on_path(executable) diff --git a/lua/neotest-golang/options.lua b/lua/neotest-golang/options.lua index 8482a765..5017cc8f 100644 --- a/lua/neotest-golang/options.lua +++ b/lua/neotest-golang/options.lua @@ -7,15 +7,15 @@ local logger = require("neotest-golang.logging") local M = {} local opts = { + runner = "go", -- or "gotestsum" go_test_args = { "-v", "-race", "-count=1" }, + gotestsum_args = { "--format=standard-verbose" }, dap_go_opts = {}, testify_enabled = false, warn_test_name_dupes = true, warn_test_not_executed = true, -- experimental, for now undocumented, options - runner = "go", -- or "gotestsum" - gotestsum_args = { "--format=standard-verbose" }, dev_notifications = false, } diff --git a/tests/unit/options_spec.lua b/tests/unit/options_spec.lua index 8b669990..02dc277b 100644 --- a/tests/unit/options_spec.lua +++ b/tests/unit/options_spec.lua @@ -4,19 +4,19 @@ local _ = require("plenary") describe("Options are set up", function() it("With defaults", function() local expected_options = { + runner = "go", go_test_args = { "-v", "-race", "-count=1", }, + gotestsum_args = { "--format=standard-verbose" }, dap_go_opts = {}, testify_enabled = false, warn_test_name_dupes = true, warn_test_not_executed = true, -- experimental - runner = "go", - gotestsum_args = { "--format=standard-verbose" }, dev_notifications = false, } options.setup() @@ -25,20 +25,20 @@ describe("Options are set up", function() it("With non-defaults", function() local expected_options = { + runner = "go", go_test_args = { "-v", "-race", "-count=1", "-parallel=1", -- non-default }, + gotestsum_args = { "--format=standard-verbose" }, dap_go_opts = {}, testify_enabled = false, warn_test_name_dupes = true, warn_test_not_executed = true, -- experimental - runner = "go", - gotestsum_args = { "--format=standard-verbose" }, dev_notifications = false, } options.setup(expected_options)