2016-11-25 7 views
5

Ich versuche IEx.pry innerhalb eines Tests zu starten. Allerdings kann ich die Tests nicht innerhalb einer IEX-Sitzung ausführen. Beachten Sie, dass ich keine Mischung verwende.So führen Sie ExUnit-Tests innerhalb von IEx aus

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 

Ich versuche es mit ExUnit.run hängt laufen und schließlich mal aus:

[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 

Der Code wird korrekt geladen und ich kann es direkt mit TheTest."test adds two numbers"({}) aufrufen. Aber ich hatte gehofft, dass ich damit die ganze Suite starten könnte.

+2

Warum verwenden Sie nicht 'mix'? – Simone

+0

Sie können dies hilfreich finden http://stackoverflow.com/questions/29671156/pry-whites-testing – Simone

+0

Ich glaube, da Sie nicht 'Mix' verwenden, sollten Sie mutig genug sein,' ExUnit' Server-Anwendung selbst zu starten. – mudasobwa

Antwort

4

Ich nehme an, Sie verwenden nicht mix. Sie müssen die Testfälle auf den ExUnit Server laden, bevor sie mit dem Betrieb:

ExUnit.Server.cases_loaded() 

So ist der Code, den Sie in iex sollte schreiben sollte:

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() 

Ich hoffe, das hilft.

0

Entsprechend der ExUnit documentation sollte ExUnit.run/0 nur verwendet werden, wenn Sie Ihre Tests nicht automatisch starten möchten, wenn Sie ExUnit.start/1 anrufen.

Sie müssen immer ExUnit.start() anrufen, die automatisch alle Tests ausführen würde, es sei denn, Sie übergeben autorun: false.

Verwandte Themen