Home

Awesome

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

Additional Functionality

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

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).