【问题标题】:ExUnit - run all tests stored in a custom directory (not tests/)ExUnit - 运行存储在自定义目录中的所有测试(不是测试/)
【发布时间】:2016-07-13 20:22:05
【问题描述】:

我想在我的 Elixir 项目中拥有两组独立的单元测试,我可以使用不同的 ExUnit 配置单独运行它们。我正在开发一个 ExUnit 格式化程序,我正在尝试为它编写单元测试它。为了测试它,我想我会创建另一个目录(example_tests),其中包含一个类似于test/ 中的test_helper.exs 文件,但将ExUnit 配置为使用我的自定义格式化程序。我将我的格式化程序添加为 ExUnit 格式化程序,然后创建了一个测试模块 example_tests。现在的问题是我不知道如何配置 ExUnit 以使用 example_tests/test_helper.exs 中指定的配置运行 example_tests/ 中的所有测试。

我发现有一个test_paths 配置参数可以在mix.exs 文件中设置。问题是值是在每个项目的基础上设置的,我需要它有两个不同的值(通常只是["test"],但随后使用格式化程序["example_tests"] 进行测试运行)。我假设我可以在每个任务的基础上覆盖配置值,所以我也创建了一个 example_tests 任务,但我不知道如何更改配置。

有没有办法根据每个任务自定义项目配置 (Mix.Project.config)? 或者,有没有更好的方法来创建具有不同 ExUnit 配置的两组独立测试?

更新:

这里是test Mix 任务的源代码链接:https://github.com/elixir-lang/elixir/blob/master/lib/mix/lib/mix/tasks/test.ex

【问题讨论】:

    标签: unit-testing elixir elixir-mix


    【解决方案1】:

    您可以在test_paths 中放置多个路径,只要它们都有一个 test_helper.exs 文件,当执行给定路径中的测试时,它们会使用该路径的测试助手执行。因此test 下的任何内容都可以使用默认格式化程序,但example_test 下的任何内容都可以使用您的自定义格式化程序运行。

    您还可以在给定测试模块的setup_all 回调中运行ExUnit.configure(formatters: [MyFormatter]),以便该模块中的所有测试都使用您的格式化程序,并使用on_exit 回调将其切换回默认值。您可能需要为您的测试设置async: false,因为我认为格式化程序配置对于所有测试都是全局的 - 或者使用 moduletag 属性(例如@moduletag :custom_formatter)来标记应该运行哪一组测试作为,然后使用mix test --include custom_formatter 和mix test --exclude custom_formatter 仅将这些测试作为一个组一起运行。然后使用混合任务别名来简化您的生活(例如,mix test 使用默认格式化程序运行测试,mix test.custom 使用您的自定义格式化程序运行测试。

    希望其中一个对您来说是一个可行的解决方案!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多