2016-03-26 69 views
3

我希望在我的Elixir項目中有兩套獨立的單元測試,我可以使用不同的ExUnit配置單獨運行。我正在使用ExUnit格式器,我正在爲它編寫單元測試。爲了測試它,我想我會創建另一個包含test_helper.exs文件的目錄(example_tests),與test/中的類似,但ExUnit配置爲使用我的自定義格式化程序。我將格式化程序添加爲ExUnit格式化程序,然後創建一個測試模塊example_tests。現在的問題是我不知道如何配置ExUnit以使用在example_tests/test_helper.exs中指定的配置運行example_tests/中的所有測試。ExUnit - 運行存儲在自定義目錄中的所有測試(不測試/)

我發現有一個test_paths配置參數可以在mix.exs文件中設置。問題在於,每個項目都設置了一個值,我需要它有兩個不同的值(通常只有["test"],但隨後用格式化程序["example_tests"]進行測試)。我認爲我可以在每個任務的基礎上覆蓋配置值,所以我也創建了一個example_tests任務,但我無法弄清楚如何改變配置。

有沒有辦法根據每個任務自定義項目配置(Mix.Project.config)?或者,是否有更好的方法來創建兩個不同的ExUnit配置單獨的測試集?

更新:

這裏是源代碼的鏈接爲test混音任務:https://github.com/elixir-lang/elixir/blob/master/lib/mix/lib/mix/tasks/test.ex

回答

2

你可以把多個路徑test_paths,只要他們都有一個test_helper。 exs文件,當執行給定路徑中的測試時,將使用該路徑的測試幫助程序執行它們。所以test以下的任何東西都可以使用默認的格式化程序,但是然後example_test下的任何東西都可以使用您的自定義格式化程序運行。

你也可以在setup_all回調給定測試模塊運行ExUnit.configure(formatters: [MyFormatter]),使該模塊在所有測試中使用的格式,並使用on_exit回調來切換回默認值。您可能需要爲您的測試設置async: false,因爲我認爲formatter配置對於所有測試是全局的 - 要麼使用moduletag屬性(例如@moduletag :custom_formatter)來標記應該運行一組測試的組,使用mix test --include custom_formattermix test --exclude custom_formatter僅作爲一個組運行這些測試。然後使用混合任務別名來簡化你的生活(如mix test運行與默認格式測試和mix test.custom運行測試您的自定義格式。

希望那些是給你的一個可行的解決方案!

相關問題