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
endHere 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
endSee 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.