/snapshy

📸 A package for running snapshot tests in Elixir

Primary LanguageElixir

Snapshy

Snapshy is an Elixir package for running snapshot tests in ExUnit.

Alternatives

When I was creating Snapshy I didn't know of any package that would support snapshot testing in Elixir. Since, I have found @assert-value's assert_value_elixir, which is more feature-rich and more polished. If you need something very light-weight, Snapshy might be a good choice. However, if you want interactivity and more features, give assert_value_elixir a try :)

Installation

Add snapshy to your list of dependencies in mix.exs and run mix deps.get:

def deps do
  [
    # ...
    {:snapshy, "~> 0.2"}
  ]
end

Overview

The way this works:

  1. Add Snapshy to the test
 defmodule TokenizerTest do
+  use Snapshy
   use ExUnit.Case

   # ...
 end
  1. Replace test with test_snapshot
-  test "correctly tokenizes booleans" do
+  test_snapshot "correctly tokenizes booleans" do
     # ...
   end
  1. Replace an assertion with simple function call
-    assert(
-      tokens("true false") == [
-        boolean: "true",
-        boolean: "false"
-      ]
-    )
+    tokens("true false")

The first time a snapshot will be created in test/__snapshots__/path/to/test_file/function_name.stub. The second time, an assertion will be made against the snapshot. If you make changes and you want to update snapshots, run SNAPSHY_OVERRIDE=true mix test instead of mix test. Verify in git every change is correct.

Alternatively, you can use a macro call instead of the test_snapshot macro like so:

test "correctly tokenizes booleans" do
  match_snapshot tokens("true false")
end

Careful! There can only be one match_snapshot call per test macro call.