2015-11-03 68 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中,但使用混合項目要容易得多而且不易碎。 –