12

我正在尝试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"({}). 但我希望这样做会启动整个套件。

4

3 回答 3

9

我假设你没有使用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()

我希望这有帮助。

于 2016-11-28T09:47:19.063 回答
0

根据ExUnit 文档ExUnit.run/0仅当您不想在调用时自动启动测试时才应使用ExUnit.start/1

除非您通过,否则您始终必须调用ExUnit.start()which 将自动运行所有测试autorun: false

于 2016-11-25T22:59:14.840 回答
0
alias ExUnit.Assertions
require Assertions
Assertions.assert 1==1
true
于 2020-03-02T06:51:02.867 回答