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: :neccessary_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_neccessary_value
      end

      # matchers to handle common testing idioms
      should_match_key sometimes_necessary_key: :sometimes_necessary_value
  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(list1)

Wrap ExUnit’s setup macro, without context

setup(context_name, list2)

Wrap ExUnit’s setup macro, but allow nesting. Setups will be chained with the outer most modules running first

should(name, options)

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

should(name, context, options)

Create a test case with 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(description, list2)

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(list1)

Wrap ExUnit’s setup macro, without context.

Source
setup(context_name, list2)

Wrap ExUnit’s setup macro, but allow nesting. Setups will be chained with the outer most modules running first.

Source
should(name, options)

Create a test case. 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)

Source
should(name, context, options)

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

examples

should “check conext 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(description, list2)

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

example

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