golden

package
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 21, 2023 License: MIT, MIT Imports: 14 Imported by: 0

Documentation

Overview

Package golden provides test assertions based on golden files. It's typically used for testing responses with larger data bodies.

The concept is straight forward. Valid response data is stored in a "golden file". The actual response data will be byte compared with the golden file and the test will fail if there is a difference.

Updating the golden file can be done by running `go test -update ./...`.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Diff

func Diff(engine DiffEngine, actual string, expected string) (diff string)

Diff generates a string that shows the difference between the actual and the expected. This method could be called in your own DiffFn in case you want to leverage any of the engines defined.

Types

type DiffEngine

type DiffEngine int

DiffEngine is used to enumerate the diff engine processors that are available.

const (
	// UndefinedDiff represents any undefined diff processor. If a new diff
	// engine is implemented, it should be added to this enumeration and to the
	// `diff` helper function.
	UndefinedDiff DiffEngine = iota

	// ClassicDiff produces a diff similar to what the `diff` tool would
	// produce.
	//		+++ Actual
	//		@@ -1 +1 @@
	//		-Lorem dolor sit amet.
	//		+Lorem ipsum dolor.
	//
	ClassicDiff

	// ColoredDiff produces a diff that will use red and green colors to
	// distinguish the diffs between the two values.
	ColoredDiff

	// Simple is a very plain way of printing the byte comparison. It will look
	// like this:
	//
	// Expected: <data>
	// Got: <data>
	Simple
)

noinspection GoUnusedConst

type DiffFn

type DiffFn func(actual string, expected string) string

DiffFn takes in an actual and expected and will return a diff string representing the differences between the two.

type Golden

type Golden struct {
	// contains filtered or unexported fields
}

Golden is the root structure for the test runner. It provides test assertions based on golden files. It's typically used for testing responses with larger data bodies.

func New

func New(t *testing.T, options ...Option) *Golden

New creates a new golden file tester. If there is an issue with applying any of the options, an error will be reported and t.FailNow() will be called.

func (*Golden) Assert

func (g *Golden) Assert(t *testing.T, name string, actualData []byte)

Assert compares the actual data received with the expected data in the golden files. If the update flag is set, it will also update the golden file.

`name` refers to the name of the test and it should typically be unique within the package. Also it should be a valid file name (so keeping to `a-z0-9\-\_` is a good idea).

func (*Golden) AssertJSON

func (g *Golden) AssertJSON(t *testing.T, name string, actualJSONData interface{})

AssertJSON compares the actual json data received with expected data in the golden files. If the update flag is set, it will also update the golden file.

`name` refers to the name of the test and it should typically be unique within the package. Also it should be a valid file name (so keeping to `a-z0-9\-\_` is a good idea).

func (*Golden) AssertWithTemplate

func (g *Golden) AssertWithTemplate(t *testing.T, name string, data interface{}, actualData []byte)

AssertWithTemplate compares the actual data received with the expected data in the golden files after executing it as a template with data parameter. If the update flag is set, it will also update the golden file. `name` refers to the name of the test and it should typically be unique within the package. Also it should be a valid file name (so keeping to `a-z0-9\-\_` is a good idea).

func (*Golden) AssertXML

func (g *Golden) AssertXML(t *testing.T, name string, actualXMLData interface{})

AssertXML compares the actual xml data received with expected data in the golden files. If the update flag is set, it will also update the golden file.

`name` refers to the name of the test and it should typically be unique within the package. Also it should be a valid file name (so keeping to `a-z0-9\-\_` is a good idea).

func (*Golden) GoldenFileName

func (g *Golden) GoldenFileName(t *testing.T, name string) string

GoldenFileName simply returns the file name of the golden file fixture.

func (*Golden) Update

func (g *Golden) Update(t *testing.T, name string, actualData []byte) error

Update will update the golden fixtures with the received actual data.

This method does not need to be called from code, but it's exposed so that it can be explicitly called if needed. The more common approach would be to update using `go test -update ./...`.

func (*Golden) WithDiffEngine

func (g *Golden) WithDiffEngine(engine DiffEngine) error

WithDiffEngine sets the `diff` engine that will be used to generate the `diff` text.

func (*Golden) WithDiffFn

func (g *Golden) WithDiffFn(fn DiffFn) error

WithDiffFn sets the `diff` engine to be a function that implements the DiffFn signature. This allows for any customized diff logic you would like to create.

func (*Golden) WithDirPerms

func (g *Golden) WithDirPerms(mode os.FileMode) error

WithDirPerms sets the directory permissions for the directories in which the golden files are created.

Defaults to 0755.

func (*Golden) WithFilePerms

func (g *Golden) WithFilePerms(mode os.FileMode) error

WithFilePerms sets the file permissions on the golden files that are created.

Defaults to 0644.

func (*Golden) WithFixtureDir

func (g *Golden) WithFixtureDir(dir string) error

WithFixtureDir sets the fixture directory.

Defaults to `testdata`

func (*Golden) WithIgnoreTemplateErrors

func (g *Golden) WithIgnoreTemplateErrors(ignoreErrors bool) error

WithIgnoreTemplateErrors allows template processing to ignore any variables in the template that do not have corresponding data values passed in.

Default value is false.

func (*Golden) WithNameSuffix

func (g *Golden) WithNameSuffix(suffix string) error

WithNameSuffix sets the file suffix to be used for the golden file.

Defaults to `.golden`

func (*Golden) WithSubTestNameForDir

func (g *Golden) WithSubTestNameForDir(use bool) error

WithSubTestNameForDir will create a directory with the sub test's name to store all the golden files. If WithTestNameForDir is enabled, it will be in the test name's directory. Otherwise, it will be in the fixture directory.

Default value is false.

func (*Golden) WithTestNameForDir

func (g *Golden) WithTestNameForDir(use bool) error

WithTestNameForDir will create a directory with the test's name in the fixture directory to store all the golden files.

Default value is false.

type Option

type Option func(OptionProcessor) error

Option defines the signature of a functional option method that can apply options to an OptionProcessor.

func WithDiffEngine

func WithDiffEngine(engine DiffEngine) Option

WithDiffEngine sets the `diff` engine that will be used to generate the `diff` text.

Default: ClassicDiff noinspection GoUnusedExportedFunction

func WithDiffFn

func WithDiffFn(fn DiffFn) Option

WithDiffFn sets the `diff` engine to be a function that implements the DiffFn signature. This allows for any customized diff logic you would like to create. noinspection GoUnusedExportedFunction

func WithDirPerms

func WithDirPerms(mode os.FileMode) Option

WithDirPerms sets the directory permissions for the directories in which the golden files are created.

Defaults to 0755. noinspection GoUnusedExportedFunction

func WithFilePerms

func WithFilePerms(mode os.FileMode) Option

WithFilePerms sets the file permissions on the golden files that are created.

Defaults to 0644. noinspection GoUnusedExportedFunction

func WithFixtureDir

func WithFixtureDir(dir string) Option

WithFixtureDir sets the fixture directory.

Defaults to `testdata`

func WithIgnoreTemplateErrors

func WithIgnoreTemplateErrors(ignoreErrors bool) Option

WithIgnoreTemplateErrors allows template processing to ignore any variables in the template that do not have corresponding data values passed in.

Default value is false. noinspection GoUnusedExportedFunction

func WithNameSuffix

func WithNameSuffix(suffix string) Option

WithNameSuffix sets the file suffix to be used for the golden file.

Defaults to `.golden`

func WithSubTestNameForDir

func WithSubTestNameForDir(use bool) Option

WithSubTestNameForDir will create a directory with the sub test's name to store all the golden files. If WithTestNameForDir is enabled, it will be in the test name's directory. Otherwise, it will be in the fixture directory.

Default value is false. noinspection GoUnusedExportedFunction

func WithTestNameForDir

func WithTestNameForDir(use bool) Option

WithTestNameForDir will create a directory with the test's name in the fixture directory to store all the golden files.

Default value is false. noinspection GoUnusedExportedFunction

type OptionProcessor

type OptionProcessor interface {
	WithFixtureDir(dir string) error
	WithNameSuffix(suffix string) error
	WithFilePerms(mode os.FileMode) error
	WithDirPerms(mode os.FileMode) error

	WithDiffEngine(engine DiffEngine) error
	WithDiffFn(fn DiffFn) error
	WithIgnoreTemplateErrors(ignoreErrors bool) error
	WithTestNameForDir(use bool) error
	WithSubTestNameForDir(use bool) error
}

OptionProcessor defines the functions that can be called to set values for a tester. To expand this list, add a function to this interface and then implement the generic option setter below.

type Tester

type Tester interface {
	Assert(t *testing.T, name string, actualData []byte)
	AssertJSON(t *testing.T, name string, actualJSONData interface{})
	AssertXML(t *testing.T, name string, actualXMLData interface{})
	AssertWithTemplate(t *testing.T, name string, data interface{}, actualData []byte)
	Update(t *testing.T, name string, actualData []byte) error
	GoldenFileName(t *testing.T, name string) string
}

Tester defines the methods that any golden tester should support.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL