2015-11-03 71 views
2

我有时会看到为:pending如何运行:命令行挂起的测试?

ExUnit.start 
ExUnit.configure(exclude: :pending) 

defmodule SublistTest do 
    use ExUnit.Case, async: true 

    test "empty equals empty" do 
    assert Sublist.compare([], []) == :equal 
    end 

    @tag :pending 
    test "empty is a sublist of anything" do 
    assert Sublist.compare([], [nil]) == :sublist 
    end 
end 

显然,从执行排除测试功能标签,当你从外壳

elixir sublist_test.exs 

运行测试,有没有办法从运行测试时,包括:pending测试命令行?

第二个问题:为什么人们将测试标记为:pending

回答

4

您可以在Mix项目中使用mix test任务完成此任务。混合项目是超级简单的设置:

$ mix new sublist 

可以在test/test_helper.exs指定默认排除:

ExUnit.start() 
ExUnit.configure(exclude: :pending) 

,那么你可以写你的测试中test/sublist_test.exs。要运行测试,做

$ mix test 

,并包括未决的测试以及做

$ mix test --include pending 

现在对于你的第二个问题:人们通常标记测试为未完成,因为他们还没有实现,但他们不不想忘记他们。例如,您可能会在紧急的截止日期前完成测试,但要确保最终完成测试。或者,也许测试还没有工作,因为你需要首先实现其他事情。

如果测试没有被默认排除,他们会传达错误的信息:受影响的测试是红色的。但他们宁愿做项目而不是实际测试,所以他们不应该默认失败。

+0

如果我只有两个文件,该怎么办?例如:sublist.exs,sublist_test.exs。我不能使用'mix',因为我没有'mix.exs'。 – kendriu

+0

我不认为这是可能的。您可以阅读命令行参数,然后将其手动输入到exunit ocnfiguration中,但使用混合项目要容易得多而且不易碎。 –