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">
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
Macros
Wrap ExUnit’s setup macro, but allow nesting. Setups will be chained with the outer most modules running first.
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)
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)
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)
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