unit testing - Run ExUnit.Case functions serially using Agent -
i know that, default, exunit.case synchronous (according docs http://elixir-lang.org/docs/stable/ex_unit/exunit.case.html). read issue ( https://github.com/elixir-lang/elixir/issues/3580 ) , seems test functions inside case run serially.
when run simple test case without global state cases indeed run serially.
but when use global state agent order of execution depends on luck. same call
mix test --trace   the order of execution change. here test suite:
defmodule serialtest   use exunit.case    test "1"     agent.update(:card_id, fn nil -> 1 end)     assert true   end    test "2"     res = agent.get(:card_id, fn res -> res end)     assert res == 1   end    test "3"     agent.update(:card_id, fn id -> 3 end)     assert true   end    test "4"     res = agent.get(:card_id, fn res -> res end)     assert res == 3   end end   sometimes passes not. how can have execution order of functions conform declaration order in file defined using agent's global state?
the tests run serially run in random order. tests failing because order dependent change global state.
when run suite see @ bottom:
randomized seed 596046   you can disable adding exunit.configure seed: 0 test_helper.exs rather advise tests order independent.
Comments
Post a Comment