MIT licensed by Stack Builders
Maintained by [email protected]
This version can be pinned in stack with:hspec-golden-,1825

Module documentation for


Build Status


Golden tests store the expected output in a separated file. Each time a golden test is executed the output of the subject under test (SUT) is compared with the expected output. If the output of the SUT changes then the test will fail until the expected output is updated.

hspec-golden allows you to write golden tests using the popular hspec.

Getting started

You can write golden tests using defaultGolden helper:

describe "myFunc" $
  it "generates the right output with the right params" $
     let output = show $ myFunc params
       in defaultGolden "myFunc" output

The first parameter of defaultGolden is the golden file name. I recommend you to use show and 'functionName (enable TemplateHaskellQuotes for the quote) to always have a unique name for your file. Example: show 'myFunc == MyModule.myFunc. Although, you can name it as you like.

In case your output isn’t a String you can define your own Golden test using the Golden data type:

{-# LANGUAGE TemplateHaskellQuotes #-}

import           Test.Hspec
import           Test.Hspec.Golden
import           Data.Text (Text)
import qualified Data.Text.IO as T

myGoldenTest :: String -> Text -> Golden Text
myGoldenTest name actualOutput =
  Golden {
    output = actualOutput,
    encodePretty = prettyText,
    writeToFile = T.writeFile,
    readFromFile = T.readFile,
    testName = name,
    directory = ".myGoldenTestDir",
    failFirstTime = False

describe "myTextFunc" $
  it "generates the right output with the right params" $
     let textOutput = myTextFunc params
       in myGoldenTest (show 'myTextFunc) textOutput

Installing CLI

You can install the hspec-golden command line interface (CLI) with stack:

$ stack install hspec-golden

or cabal:

$ cabal install hspec-golden

The CLI is called hgold:

$ hgold -h

Update your golden files

Usage: hgold [-u|--update [DIR]] [-v|--version]

Available options:
  -u,--update [DIR]        The testing directory where you're dumping your
                           results. (default: ".golden")
  -v,--version             Show version
  -h,--help                Show this help text

Update the golden tests under .golden directory:

$ hgold

Update the golden tests under .myGoldenTest directory:

$ hgold -u .myGoldenTest


MIT, see the LICENSE file.


Pull requests for modifications to this program are welcome! Fork and open a PR.

If you’re looking for a place to start, you may want to check the open issue.


Changelog for hspec-golden


  • Lowerbound for hspec-core in hspec-golden library


  • CLI updates tests recursively #19
  • Allow first execution to fail #16


  • CLI changed to work with optparse-applicative.


  • CLI to update actual files to golden
  • Basic functionality to have Golden tests in hspec.
  • Golden str type to write your own golden tests for the kind of type that you need and a variable output folder.
  • defaultGolden helper to create golden tests when your results are simple Strings.