Как запускать тесты ExUnit в IEx

Я пытаюсь запустить IEx.pry в рамках теста. Однако я не могу запустить тесты в сеансе 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.run зависаниями и, в конце концов, истекает время ожидания:

manuel@laptop:~/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"({}). Но я надеялся сделать это, запустив весь пакет.


person Manuel M    schedule 25.11.2016    source источник
comment
Почему вы не используете mix?   -  person Simone    schedule 25.11.2016
comment
Вы можете найти это полезным stackoverflow.com/questions/29671156/pry-while-testing   -  person Simone    schedule 25.11.2016
comment
Я считаю, что, поскольку вы не используете mix, вы должны быть достаточно смелыми, чтобы запустить серверное приложение ExUnit самостоятельно.   -  person Aleksei Matiushkin    schedule 25.11.2016
comment
Спасибо @simone, этот ответ предполагает, что это проект mix. Это не так. Я не ожидал, что мне понадобится настраивать проект микширования, чтобы иметь возможность сделать это так же, как я не ожидал настроить Rake для запуска Pry в RSpec. Надеюсь, это не ответ.   -  person Manuel M    schedule 25.11.2016
comment
Хороший совет @mudasoba, но :observer.start показывает, что Elixir.ExUnit.Server работает. Это то, о чем вы говорили? Если да, то проблема должна быть где-то в другом месте.   -  person Manuel M    schedule 25.11.2016


Ответы (2)


Я предполагаю, что вы не используете mix. Вам необходимо загрузить тестовые примеры на сервер ExUnit перед их запуском.

До Elixir v1.6 вы загружали тесты следующим образом:

ExUnit.Server.cases_loaded()

А после Elixir v1.6 вы бы загружали их так (спасибо @jeffreymatthias):

ExUnit.Server.modules_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.modules_loaded() # Or ExUnit.Server.cases_loaded()

ExUnit.run()

Надеюсь, это поможет.

person Alex de Sousa    schedule 28.11.2016
comment
ExUnit.Server.cases_loaded() устарела. Вместо этого используйте ExUnit.Server.modules_loaded(). - person jeffreymatthias; 07.08.2018

Согласно документации ExUnit, ExUnit.run/0 следует использовать, только если вы не не хотите автоматически запускать тесты при вызове ExUnit.start/1.

Вам всегда нужно вызывать ExUnit.start(), который будет запускаться автоматически все тесты, если вы не пройдете autorun: false.

person narrowtux    schedule 25.11.2016