ShouldI

ShouldI is a testing DSL around ExUnit.

ShouldI supports with blocks for nested contexts, convenience apis for behavioral naming.

Examples

defmodule MyFatTest do

  with "necessary_key" do
    setup context do
      assign context,
        necessary_key: :necessary_value
    end

    should( "have necessary key", context ) do
      assert context.necessary_key == :necessary_value
    end

    with "sometimes_necessary_key" do
      setup context do
        assign context,
          :sometimes_necessary_key, :sometimes_necessary_value
      end

      # matchers to handle common testing idioms
      should_match_key sometimes_necessary_key: :sometimes_necessary_value
    end
  end
end

ShouldI provides support for common idioms through matchers.

For example, these matchers are for plug:

should_respond_with :success
should_match_body_to "<div id="test">
Source

Summary

assign(context, options)

Shorthand function for assigning context key/value pairs

setup(var \\ quote() do _ end, list)
should(name, var \\ quote() do _ end, options)

Create a test case with an optional context. This macro thinly wraps ExUnit’s test macro and names the test case with “should”

uid(id \\ nil)

Sometimes, when running a test concurrently, it’s helpful to generate a unique identifier so resources don’t collide. This macro creates ids, optionally appended

with(context, opts)

A function for wrapping together common setup code. with is useful for nesting setup requirements:

Functions

assign(context, options)

Shorthand function for assigning context key/value pairs.

Source

Macros

setup(var \\ quote() do _ end, list)
Source
should(name, var \\ quote() do _ end, options)

Create a test case with an optional context. This macro thinly wraps ExUnit’s test macro and names the test case with “should”.

Examples

should "add two numbers", do: (assert 2 + 2 = 4)
should "check context for :key", do: (assert context.key == :value)
Source
uid(id \\ nil)

Sometimes, when running a test concurrently, it’s helpful to generate a unique identifier so resources don’t collide. This macro creates ids, optionally appended

Examples

assert {:ok, _} = join_chatroom(uid("discussion"), Mock.user)
Source
with(context, opts)

A function for wrapping together common setup code. with is useful for nesting setup requirements:

Examples

with "a logged in user" do
  setup do
    ... setup a logged in user
  end

  with "a get to :index" do
    setup do
      assign context,
      response: get(:index)
    end

    should_respond_with :success
    should_match_body_to "some_string_to_match"
  end
end
Source