如何 运行 在 IEx 中进行 ExUnit 测试
How to run ExUnit tests within 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"({})
调用它。但我希望这样做可以启动整个套件。
根据 ExUnit documentation,只有当您不想在调用 ExUnit.start/1
时自动启动测试时才应使用 ExUnit.run/0
。
您总是必须调用 ExUnit.start()
,它将自动 运行 所有测试,除非您通过 autorun: false
。
我假设您没有使用 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()
希望对您有所帮助。
alias ExUnit.Assertions
require Assertions
Assertions.assert 1==1
true
我正在尝试在测试中启动 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"({})
调用它。但我希望这样做可以启动整个套件。
根据 ExUnit documentation,只有当您不想在调用 ExUnit.start/1
时自动启动测试时才应使用 ExUnit.run/0
。
您总是必须调用 ExUnit.start()
,它将自动 运行 所有测试,除非您通过 autorun: false
。
我假设您没有使用 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()
希望对您有所帮助。
alias ExUnit.Assertions
require Assertions
Assertions.assert 1==1
true