power_assert_ex
power_assert_ex copied to clipboard
Power Assert in Elixir. Shows evaluation results each expression.
Power Assert
Power Assert makes test results easier to understand, without changing your ExUnit test code.
Example test is here:
test "Enum.at should return the element at the given index" do
array = [1, 2, 3, 4, 5, 6]; index = 2; two = 2
assert array |> Enum.at(index) == two
end
Here is the difference between ExUnit and Power Assert results:
Enjoy :muscle: !
Installation
Add Power Assert to your mix.exs
dependencies:
defp deps do
[{:power_assert, "~> 0.2.0", only: :test}]
end
and fetch $ mix deps.get
.
Usage
Replace use ExUnit.Case
into use PowerAssert
in your test code:
## before(ExUnit)
defmodule YourAwesomeTest do
use ExUnit.Case # <-- **HERE**
end
## after(PowerAssert)
defmodule YourAwesomeTest do
use PowerAssert # <-- **REPLACED**
end
Done! You can run $ mix test
.
Use with ExUnit.CaseTemplate
Insert use PowerAssert
with ExUnit.CaseTemplate.using/2
macro:
## before(ExUnit.CaseTemplate)
defmodule YourAwesomeTest do
use ExUnit.CaseTemplate
end
## after(PowerAssert)
defmodule YourAwesomeTest do
use ExUnit.CaseTemplate
# add the following
using do
quote do
use PowerAssert
end
end
end
protip: useful command to replace use ExUnit.Case
$ git grep -l 'use ExUnit\.Case' | xargs sed -i.bak -e 's/use ExUnit\.Case/use PowerAssert/g'
How to use with other framework depending on ExUnit such as ExSpec
ExSpec
Append use PowerAssert
after use ExSpec
:
defmodule ExSpecBasedTest do
use ExSpec
use PowerAssert # <-- append
describe "describe" do
it "it" do
assert something == "hoge"
end
end
end
See also: test/ex_spec/ex_spec_test.exs
API
Only provide assert
macro:
assert(expression, message \\ nil)
Dependencies
- ExUnit
Limitation
- NOT SUPPORTED
- match expression ex:
assert List.first(x = [false])
- fn expression ex:
assert fn(x) -> x == 1 end.(2)
- :: expression ex:
<< x :: bitstring >>
- this means string interpolations also unsupported ex:
"#{x} hoge"
- this means string interpolations also unsupported ex:
- sigil expression ex:
~w(hoge fuga)
- quote arguments ex:
assert quote(@opts, do: :hoge)
- case expression
- get_and_update_in/2, put_in/2, update_in/2, for/1
- <<>> expression includes attributes
<<@x, "y">>; <<x :: binary, "y">>
-
__MODULE__.Foo
- many macros maybe caught error...
- match expression ex:
Resources
Author
Takayuki Matsubara (@ma2ge on twitter)
License
Distributed under the Apache 2 License.
Check LICENSE files for more information.