Packages

Pavlov is a BDD library for your Elixir projects, allowing you to write expressive unit tests that tell the story of how your application behaves. The syntax tries to follow RSpec's wherever possible.

Current section

Files

Jump to
pavlov lib syntax expect.ex
Raw

lib/syntax/expect.ex

defmodule Pavlov.Syntax.Expect do
@moduledoc """
Expect syntax for writing better specs.
"""
import ExUnit.Assertions
@doc """
Sets an expectation on a value.
In this example, `eq` is a typical matcher:
## Example
expect(actual).to eq(expected)
"""
def expect(subject) do
subject
end
# Dynamically defines methods for included matchers, such that:
# For a given matcher `eq`, defines a method `to_eq`.
Enum.each Pavlov.Matchers.__info__(:functions), fn({method, _}) ->
method_name = :"to_#{method}"
@doc false
def unquote(method_name)(expected, actual \\ nil) do
args = case actual do
nil -> [expected]
_ -> [actual, expected]
end
assert apply(Pavlov.Matchers, unquote(method), args)
end
end
# Dynamically defines methods for included matchers, such that:
# For a given matcher `eq`, defines a method `not_to_eq`.
Enum.each Pavlov.Matchers.__info__(:functions), fn({method, _}) ->
method_name = :"not_to_#{method}"
@doc false
def unquote(method_name)(expected, actual \\ nil) do
args = case actual do
nil -> [expected]
_ -> [actual, expected]
end
refute apply(Pavlov.Matchers, unquote(method), args)
end
end
end