Problem:
When I run the same go test twice the second run is not done at all. The results are the cached ones from the first run.
PASS
ok tester/apitests (cached)
Links
I already checked https://golang.org/cmd/go/#hdr-Testing_flags but there is no cli flag for that purpose.
Question:
Is there a possibility to force go test to always run test and not to cache test results.
There are a few options as described in the testing flags docs:
go clean -testcache: expires all test results
use non-cacheable flags on your test run. The idiomatic way is to use -count=1
That said, changes in your code or test code will invalidate the cached test results (there's extended logic when using local files or environment variables as well), so you should not need to invalidate the test cache manually.
In Go11, I couldn't disable cache using GOCACHE
with modules, I used -count=1
instead:
go test -count=1
Prior to Go11:
GOCACHE=off go test
Or, clean test cache and run test again:
go clean -testcache && go test
There's also GOCACHE=off
mentioned here.
go 1.11
and having go modules feature on using GOCACHE=off
gives an error go: cannot use modules with build cache disabled
. The better is to use suggested -count 1
.
GOCACHE
will be slowly phased out in go 1.12 so using go test -count=1 ...
is safer choice now.
build cache is disabled by GOCACHE=off, but required as of Go 1.12
The way that I fixed this (I'm using Visual Studio Code on macOS):
Code > Preferences > Settings
Click ...
on the right hand side of the settings page
Click Open settings.json
Either:
Add the following snippet to your settings.json file "go.testEnvVars": { "GOCACHE": "off" } Change the value of go.testEnvVars to include the following: "GOCACHE": "off"
GOCACHE
will not work with recent versions of Go. A solution for VS Code is to set "go.testFlags": ["-count=1"]
in the settings.
Success story sharing
go clean -testcache ./...
works too (at the top of a monorepo)