ExUnit.Caseのasyncオプションはfalseがデフォルト
直近の3エントリでは醜態を晒し、もう晒しきったと思いきや別のところで勘違いをしていたことがわかったので書いておきます。
Elixirでテストを書くときはExUnitを使うのが定石となっていまして、以下のような書き方をします。
defmodule App1Test do use ExUnit.Case, async: true test "the function" do assert calculate() == 3 end test "the function with args" do assert calculate(4) == 8 end end defmodule App2Test do use ExUnit.Case, async: true ... end
2行目のuse
で、諸々の必要なものがここに流し込まれるのですが、一緒にasync: true
というオプションが渡されています。これを書いておくと、他のテストと並行にテストを実行してくれます。上の例だと、App1Test
とApp2Test
が同時に走ります。App1Test
の中のテストが同時に走るわけではありません。
んで何を勘違いしていたかというと、このオプションを書かなかったときに勝手にtrue
になるもんだと思い込んで、いままで書いていなかったというやつでした。ExUnit.Case
のソースには
async = !!unquote(opts)[:async]
とあるので、オプションを書かないと
async = !!(nil)
なので、並列に走らんのですな。