typestar

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

  1. The flag makes updating deliberate rather than automatic.
  2. Golden files suit output too large to inline.
  3. Review the diff when you update one.

Keywords and builtins used here

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.

Type this snippet

Step 3 of 3 in Fakes & fixtures, step 7 of 13 in Testing.

← Previous Next →