7

我的 elixir 应用程序中有一个方法,比方说Some.Module.func/1,它返回两个数字的元组。我正在用 ExUnit 编写测试,只需要测试元组中的第一个元素,并不真正关心第二个元素。

到目前为止,我已经尝试过这样做:

test "some method" do
    assert Some.Module.func(45) == {54, _}
end

但是我在运行测试时遇到了这个错误:

Compiled lib/some.ex
Generated some app
** (CompileError) test/some_test.exs:7: unbound variable _
    (stdlib) lists.erl:1353: :lists.mapfoldl/3
    (stdlib) lists.erl:1354: :lists.mapfoldl/3

为什么这不起作用,我如何忽略测试中不需要的结果?

4

1 回答 1

13

使用==. 您可以执行以下操作=

test "some method" do
  assert {54, _} = Some.Module.func(45)
end

请注意,顺序已颠倒,因为_只能出现在运算符的左侧=,否则您将收到一个CompileError您所得到的:

iex(3)> 3 = _
** (CompileError) iex:3: unbound variable _
    (elixir) src/elixir_translator.erl:17: :elixir_translator.translate/2

你也可以这样做:

test "some method" do
  {result, _} = Some.Module.func(45)
  assert result == 54
end

这可能适用于您想要对结果执行多个断言的情况。

于 2015-10-24T16:36:14.347 回答