packages feed

tasty-mgolden-0.0.2: README.md

![CI](https://github.com/mbj/tasty-mgolden/workflows/CI/badge.svg)

# tasty-mgolden

Text based [golden tests](https://ro-che.info/articles/2017-12-04-golden-tests)
for [tasty](https://github.com/feuerbach/tasty), with multi line (colored) diff expectation
failure reporting.

Basically this package can turn any `IO Text` action into a golden test via providing a
`FilePath`.

This package is the small brother of [tasty-golden](https://github.com/feuerbach/tasty-golden)
which also implements the same golden testing pattern.

`tasty-mgolden` is less generic and more opinionated than its bigger brother.
But for that reason can also offer more ergonomic defaults for its core use case:

Golden testing for `IO Text` actions. Where:

* The text value is assuemd to contain multiple lines.
* The expectation failures can be rendered nicely in multi line diffs.
* The diff lines are colored via the tasty infrastructure
* The diff rendering is not done via the external `diff` command, but uses the `Diff` package.

Expectation diffs are rendered like developers are used to:

* Removed lines rendered in red.
* Added lines in green.

## Usage

This is taken from the [example](example) directory in the repository.

To run these execute from repository root:

```
stack build
stack exec tasty-mgolden-example
```

Contents of [example/example-a.txt](example/example-a.txt)

```
foo
bar
```

Contents of [example/example-b.txt](example/example-b.txt)

```
foo
bar
```

Contents: `example/Test.hs`

```haskell
import Test.Tasty
import Test.Tasty.MGolden

main :: IO ()
main = defaultMain $ testGroup "golden tests"
  [ goldenTest "example-a" "example/example-a.txt" $ pure "foo\nbar\n"
  , goldenTest "example-b" "example/example-b.txt" $ pure "foo\nbaz\n"
  ]
```

Output:

```diff
golden tests
  example-a: OK
  example-b: FAIL
 foo
-bar
+baz

1 out of 2 tests failed (0.00s)
```

Passing the `--update` flag to accept the changes:

```
golden tests
  example-a: OK
  example-b: OK
    UPDATE

All 2 tests passed (0.00s)
```

### TODOs

PRs on these are welcome.

* Improve the multi line diff reporting to only show a
  minimal context around the changed hunks.
* Add line markers in unified diff format.
* Change to `pathtype` from `filepath`
* Future? Upstream this to `tasty-golden` ?