2016-11-25 5 views
5

테스트 중에 IEx.pry을 시작하려고합니다. 그러나 iex 세션에서 테스트를 실행할 수는 없습니다. 믹스를 사용하고 있지 않습니다.ExEx 내에서 ExUnit 테스트를 실행하는 방법

[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"({})로 직접 호출 할 수

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.run 정지 및 시간 초과로 실행 해보십시오. 하지만 전체 제품군을 시작하기를 바랬습니다.

+2

왜 '믹스'를 사용하지 않습니까? – Simone

+0

이 도움이 될 것입니다. http://stackoverflow.com/questions/29671156/pry-while-testing – Simone

+0

'혼합'을 사용하지 않으므로 스스로 '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()으로 전화해야합니다.