【问题标题】:I'm trying to write a test that makes sure that there is content in a text file, but it keeps failing and I'm not sure what the problem is?我正在尝试编写一个测试,以确保文本文件中有内容,但它一直失败,我不确定问题是什么?
【发布时间】:2019-05-08 12:34:47
【问题描述】:

所以我试图在我的 Elixir 项目中编写一个测试,以确保 txt 文件中有内容。但是,每次我尝试在代码中以不同的方式对测试进行表述,或者当我更改一个函数时,它总是会失败。我很困惑,我该怎么办?

我尝试使用Enum.count/1 函数,但编译器告诉我我的函数有问题。然后我尝试在Enum.count/1函数中添加一个assert命令,想着也许我需要添加它,但是编译器说assert_Enum不存在。

def read_memberlist do
  load_from_file "test/memberemaillist.txt"
end

test "that there is one member email in memberlist.txt file" do
  ClientEmailCleaner.read_memberlist()
  |> Enum.count(1)
  |> assert_Enum.count
end

我希望当我写Enum.count 时,它会计算文本文件中的内容。但是,它失败了,编译器说有一个“坏函数错误”。接下来,我尝试添加一个断言命令,但编译器告诉我,我编写的命令“assert_Enum.count”不存在。

【问题讨论】:

  • load_from_file 是在哪里定义的?了解该函数返回的内容将有助于指导有关它的断言。

标签: testing elixir


【解决方案1】:

不知道您为什么尝试使用 Enum.count 来测试 txt 文件中是否有内容。如果您的 txt 文件为空 File.read!将返回一个空字符串“”。也许你可以用

的形式写一些惯用的 Elixir
{:ok, content}, {:error, reason}

你的模块可以写成这样。

defmodule ClientEmailCleaner do

  def read_memberlist do
    memberlist = File.read!("test/member_email_list.txt")
    read_memberlist(memberlist)
  end

  defp read_memberlist(memberlist) when memberlist == "" do
    {:error, "File is empty"}
  end

  defp read_memberlist(memberlist) do
    {:ok, memberlist}
  end

end

然后在您的测试文件中,您可以编写一个涵盖这两种情况的测试。 txt文件是否包含内容都会通过。

  test "returns content or error from memberlist.txt" do
    case ClientEmailCleaner.read_memberlist do
      {:ok, content} ->
        assert content

      {:error, reason} ->
        assert reason
    end
  end

【讨论】:

    【解决方案2】:

    assert_Enum.count 对编译器来说有些陌生。此外,以下代码无效,因为您试图有效地传递两个参数,而 Enum.count/1 有 arity 1

    ClientEmailCleaner.read_memberlist()
    |> Enum.count(1)
    

    以上完全等价于Enum.count(ClientEmailCleaner.read_memberlist(), 1)

    你可能需要的是:

    assert 1 == Enum.count(ClientEmailCleaner.read_memberlist())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多