2016-03-26 72 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运行测试您的自定义格式。

希望那些是给你的一个可行的解决方案!

相关问题