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">
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
Shorthand function for assigning context key/value pairs.
Macros
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)
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:
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