Skip to content

joshrieken/test_that_json

Repository files navigation

Test That JSON!

Helpers for a better JSON testing experience in Elixir.

Build Status Inline docs

Using ESpec? Check out test_that_json_espec.

Docs

All Docs

For now, see the Json module for docs for much of the API.

This project has an extensive test suite, so see that for detailed usage.

Helpers

  • has_json_keys
  • has_only_json_keys
  • has_json_values
  • has_only_json_values
  • has_json_properties
  • has_only_json_properties
  • has_json_path
  • has_json_size
  • has_json_type
  • is_json_equal
  • load_json
  • load_json!
  • parse_json
  • parse_json!
  • prettify_json
  • prettify_json!
  • to_json
  • to_json!
  • to_prettified_json
  • to_prettified_json!

Additional Functionality

  • Helpers that return a boolean can optionally take a path
  • Helpers can be composed together w/ the pipe |> operator

Example

defmodule MyProject.ExampleTest use ExUnit.Case import TestThatJson.Helpers test "verifying JSON key presence" do json = load_json("test/support/json/valid.json") # example helper use assert has_json_keys(["key1", "key2"]) end end

Test That JSON! has extensive tests, but they're mostly written as ESpec specs because I like that style for complex testing. See the test directory for some basic happy-path tests, and the spec directory for detailed use cases.

Installation

  1. Add test_that_json as a test-only dependency in mix.exs:
def deps do [ {:test_that_json, "~> 0.6.0", only: :test}, ] end

Configuration

Key Exclusion

By default, to avoid needing to know the values of these ahead of time, the following keys are ignored for all JSON objects: id, inserted_at, and updated_at.

This can be reconfigured as follows:

config :test_that_json, excluded_keys: ~w(id inserted_at updated_at some other keys)

Paths

These are simple strings of "/"-separated object keys and array indexes passed to has_json_path. For instance, with the following JSON:

{ "first_name": "Jon", "last_name": "Snow", "friends": [ { "first_name": "Know", "last_name": "Nothing" } ] }

We could access the first friend's first name with the path "friends/0/first_name".

Project Chores

  • Tests
  • Docs for entire helper API

Related Projects

Thanks

Thanks to the creators and maintainers of the Ruby json_spec project for heavy inspiration.

Contributing

  1. Before opening a pull request, please open an issue first.
  2. Do the usual fork/add/fix/run tests dance, or whatever tickles your fancy. Tests are highly encouraged.
  3. Open a PR.
  4. Treat yourself. You deserve it.

License

See the LICENSE file for license rights and limitations (MIT).

About

JSON-related helpers for your Elixir testing needs

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages