2016-11-25 2 views
5

IEx.pryをテスト中に起動しようとしています。しかし、私はiexセッション内でテストを実行することはできません。私はミックスを使用していないことに注意してください。私はExUnit.runハングし、最終的にタイムアウトでそれを実行してみてくださいExExit内でExUnitテストを実行する方法

ExUnit.start 

defmodule Calc do 
    def add(a,b) do 
    a + b 
    end 
end 

defmodule TheTest do 
    use ExUnit.Case 

    test "adds two numbers" do 
    require IEx 
    IEx.pry 
    assert Calc.add(1, 2) == 3 
    end 
end 

[email protected]:~/exercism/elixir/nucleotide-count$ iex test.exs    
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false] 

Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help) 
iex(1)> ExUnit.run 
** (exit) exited in: GenServer.call(ExUnit.Server, {:take_async_cases, 8}, 60000) 
** (EXIT) time out 
(elixir) lib/gen_server.ex:604: GenServer.call/3 
(ex_unit) lib/ex_unit/runner.ex:71: ExUnit.Runner.loop/2 
(stdlib) timer.erl:166: :timer.tc/1 
(ex_unit) lib/ex_unit/runner.ex:13: ExUnit.Runner.run/2 

コードが正しくセットされていると私はTheTest."test adds two numbers"({})で直接呼び出すことができます。しかし、私はスイート全体を起動することを望んでいた。

+2

なぜあなたは 'mix'を使用していませんか? – Simone

+0

これは役に立ちます。http://stackoverflow.com/questions/29671156/pry-while-testing – Simone

+0

あなたは 'mix'を使用していないので、自分で' ExUnit'サーバアプリケーションを起動するのに十分な勇気がなければならないと思います。 – mudasobwa

答えて

4

mixを使用していないと仮定しています。あなたはそれらを実行する前にExUnitサーバーにテストケースをロードする必要があります。

ExUnit.Server.cases_loaded() 

ですから、iexに書くべきコードは次のようになります。

ExUnit.start() 

defmodule Calc do 
    def add(a,b) do 
    a + b 
    end 
end 

defmodule TheTest do 
    use ExUnit.Case 

    test "adds two numbers" do 
    require IEx 
    IEx.pry() 
    assert Calc.add(1, 2) == 3 
    end 
end 

ExUnit.Server.cases_loaded() 

ExUnit.run() 

私はこのことができます願っています。

0

ExUnit documentationによれば、ExUnit.start/1に電話をしたときにテストを自動開始しない場合は、ExUnit.run/0を使用する必要があります。

autorun: falseを渡さない限り、すべてのテストを自動的に実行するExUnit.start()に電話する必要があります。

関連する問題