Skip to content

Commit

Permalink
feat: gotestsum
Browse files Browse the repository at this point in the history
  • Loading branch information
fredrikaverpil committed Jul 23, 2024
1 parent 41cf5e5 commit e931b9c
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 13 deletions.
51 changes: 44 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

<details>
Expand Down
3 changes: 3 additions & 0 deletions lua/neotest-golang/health.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions lua/neotest-golang/options.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}

Expand Down
8 changes: 4 additions & 4 deletions tests/unit/options_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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)
Expand Down

0 comments on commit e931b9c

Please sign in to comment.