hspec-expectations-json alternatives and similar packages
Based on the "hspec" category.
Alternatively, view hspec-expectations-json alternatives based on common mentions on social networks and blogs.
-
hspec-expectations
Catchy combinators for HUnit -
hspec-checkers
Allows to use checkers properties from hspec -
hspec-golden-aeson
Use tests to monitor changes in Aeson serialization -
hspec-jenkins
Jenkins-friendly XML formatter for Hspec -
hspec-attoparsec
utility functions for testing attoparsec parsers with hspec -
hspec-megaparsec
Utility functions for testing Megaparsec parsers with Hspec -
hspec-test-framework
Run test-framework tests with Hspec -
hspec-hedgehog
Hedgehog support for the Hspec testing framework -
hspec-expectations-match
An hspec expectation that asserts a value matches a pattern -
hspec-expectations-pretty-diff
Catchy combinators for HUnit +++ colored pretty-printed diffs -
hspec-server
Test Framework like ServerSpec for Haskell -
hspec-hashable
Initial project template from stack -
hspec-stack-rerun
Simple project template from stack -
hspec-leancheck
LeanCheck support for the Hspec test framework. -
hspec-need-env
Read environment variables for hspec tests -
hspec-multicheck
A testing framework for Haskell using Hspec
WorkOS - The modern identity platform for B2B SaaS
Do you think we are missing an alternative of hspec-expectations-json or a related project?
README
Hspec Expectations for JSON Values
Comparing JSON Value
s in Haskell tests comes with some challenges:
In API responses, additive changes are typically safe and an important way to evolve responses without breaking clients. Therefore, assertions against such responses often want to ignore any unexpected keys in
Object
s (at any depth), as any clients would.Order often doesn't matter in API responses either, so it should be possible to assert equality regardless of
Array
ordering (again, at any depth).When an assertion fails, showing the difference clearly needs to take the above into account (i.e. it can't show keys you've ignored, or ordering differences you didn't care about), and it has to display things clearly, e.g. as a diff.
This library handles all these things.
Usage
NOTE: this is effectively a distillation of the Haddocks, please view them directly for your installed version, to ensure accurate information.
Four expectations exist with the following behaviors:
Assertion that fails on: | extra Object keys |
wrong Array order |
---|---|---|
shouldBeJson |
Yes | Yes |
shouldBeUnorderedJson |
Yes | No |
shouldMatchJson |
No | No |
shouldMatchOrderedJson |
No | Yes |
Each of these, when they fail, print a difference between the objects, where the expected-on object has been normalized to avoid indicating any of the differences your expectation is ignoring.
shouldBeJson
Passing:
catchFailure $
[aesonQQ| { "a": true, "b": false } |] `shouldBeJson`
[aesonQQ| { "a": true, "b": false } |]
Failing:
catchFailure $
[aesonQQ| { "a": true, "b": false } |] `shouldBeJson`
[aesonQQ| { "a": true, "b": true } |]
{
"a": true,
--- "b": true
+++ "b": false
}
shouldBeUnorderedJson
Passing:
catchFailure $
[aesonQQ| { "a": [true, false], "b": false } |] `shouldBeUnorderedJson`
[aesonQQ| { "a": [false, true], "b": false } |]
Failing:
catchFailure $
[aesonQQ| { "a": [true, false], "b": false, "c": true } |] `shouldBeUnorderedJson`
[aesonQQ| { "a": [false, true], "b": true } |]
{
"a": [
false,
true
],
--- "b": true
+++ "b": false,
+++ "c": true
}
shouldMatchJson
Passing:
catchFailure $
[aesonQQ| { "a": [true, false], "b": false, "c": true } |] `shouldMatchJson`
[aesonQQ| { "a": [false, true], "b": false } |]
Failing:
catchFailure $
[aesonQQ| { "a": [true, false], "b": false, "c": true } |] `shouldMatchJson`
[aesonQQ| { "a": [false, true], "b": true } |]
{
"a": [
false,
true
],
--- "b": true
+++ "b": false
}
shouldMatchOrderedJson
Passing:
catchFailure $
[aesonQQ| { "a": [true, false], "b": false, "c": true } |] `shouldMatchOrderedJson`
[aesonQQ| { "a": [true, false], "b": false } |]
Failing:
catchFailure $
[aesonQQ| { "a": [true, false], "b": false, "c": true } |] `shouldMatchOrderedJson`
[aesonQQ| { "a": [false, true], "b": true } |]
{
"a": [
--- false,
--- true
+++ true,
+++ false
],
--- "b": true
+++ "b": false
}
[LICENSE](./LICENSE) | [CHANGELOG](./CHANGELOG.md)
*Note that all licence references and agreements mentioned in the hspec-expectations-json README section above
are relevant to that project's source code only.