gotestyourself / gotestyourself/gotestsum
`--rerun-fails` doesn't work when `--packages` specifies a source file
- Dominant language
- Go
- Stars
- 2.7k
- Forks
- 171
- PR merge metrics
- No merged PRs in 30d
Description
The error message is an opaque `package command-line-arguments is not in std`. Here's a simple repro:
```
$ cat go.mod
module my_module
go 1.23
$ cat my_test.go
package my
import "testing"
func TestFail(t *testing.T) {
t.Fatalf("msg")
}
$ gotestsum --debug --packages=my_module --rerun-fails=2 # works
$ gotestsum --debug --packages=my_test.go --rerun-fails=2 # fails, see below output
exec: [go test -json my_test.go]
go test pid: 2695782
✖ command-line-arguments (15ms)
DONE 1 tests, 1 failure in 0.347s
exec: [go test -json -test.run=^TestFail$ command-line-arguments]
go test pid: 2695942
package command-line-arguments is not in std (/usr/lib//command-line-arguments)
=== Failed
=== FAIL: command-line-arguments TestFail (0.00s)
my_test.go:8: msg
=== Errors
package command-line-arguments is not in std (/usr/lib//command-line-arguments)
DONE 2 runs, 1 tests, 1 failure, 1 error in 0.355s
ERROR rerun aborted because previous run had errors
```
It looks to me like the error comes from https://github.com/gotestyourself/gotestsum/blob/e9677fb405a5c0dc0b9d7217a7c73c3a20c5cb66/cmd/rerunfails.go#L33, in which the package that a particular failure occurs in gets pulled out of the test JSON, incorrectly in this case.
I'm not sure what the right fix is. Naively, you could just stop setting `pkg: tc.Package,` and that would fall back to the set of packages set on the command line and would probably fix my issue. However, it might cause issues in cases where you have multiple tests with the same name across the list of packages. You'd end up rerunning all of them instead of just rerunning that test within an individual package. I'll leave it up to you to decide whether that's worth it.
Right now my automation is trying to use `--rerun-fails` but it can't, not without restructuring to put each source file into its own subdirectory to work around this issue.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in cmd/rerunfails.go at line 33 and reproduce the reported commands using --packages=my_test.go and --rerun-fails=2. Trace how the failed test's package is read from the test JSON and verify that rerunning a source-file package no longer produces the command-line-arguments error while preserving package-specific reruns.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- cli, testing-qa
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100