Golden files in Go
Compare against a recorded file, and regenerate it behind a flag.
var update = flag.Bool("update", false, "rewrite golden files")
func Render(rows []string) string {
return strings.Join(rows, "\n") + "\n"
}
func TestRenderGolden(t *testing.T) {
got := Render([]string{"python 364", "rust 181"})
golden := filepath.Join("testdata", "render.golden")
if *update {
if err := os.WriteFile(golden, []byte(got), 0o600); err != nil {
t.Fatalf("write golden: %v", err)
}
}
want, err := os.ReadFile(golden)
if err != nil {
t.Skipf("no golden file yet: %v", err)
}
if got != string(want) {
t.Errorf("output changed:\ngot:\n%s\nwant:\n%s", got, want)
}
}
How it works
- The flag makes updating deliberate rather than automatic.
- Golden files suit output too large to inline.
- Review the diff when you update one.
Keywords and builtins used here
bytefuncifreturnstringvar
The run, in numbers
- Lines
- 24
- Characters to type
- 580
- Tokens
- 150
- Three-star pace
- 105 tpm
At the three-star pace of 105 tokens a minute, this run takes about 86 seconds.
Step 3 of 3 in Fakes & fixtures, step 7 of 13 in Testing.