因此,我正在尝试在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命令,但是编译器告诉我我编写的命令“ assert_Enum.count”不存在。
答案 0 :(得分: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
答案 1 :(得分:0)
assert_Enum.count
对于编译器来说有点未知。另外,以下代码无效,因为您试图在Enum.count/1
带有1
的情况下有效地传递两个参数:
ClientEmailCleaner.read_memberlist()
|> Enum.count(1)
以上内容完全等同于Enum.count(ClientEmailCleaner.read_memberlist(), 1)
。
您可能需要的是:
assert 1 == Enum.count(ClientEmailCleaner.read_memberlist())