自定义混合任务未加载测试环境

Custom mix task not loading test environment

我正在尝试组合一个自定义混合任务,它将以专门的方式执行 mix test 任务。我的混音任务是mix test.pretty.

到目前为止,我已经编写了世界上最基本的自定义混合任务:

defmodule Mix.Tasks.Test.Pretty do
  use Mix.Task

  @shortdoc "Simply runs the Hello.say/0 function"
  def run(_) do
    Mix.env(:test)

    Mix.Task.run("test", ["--formatter", "ExPrettyTest.Formatter"])
  end
end

不幸的是,当我 运行 任务 (mix test.pretty) 我得到这个错误:

** (RuntimeError) cannot invoke sandbox operation with pool DBConnection.ConnectionPool. To use the SQL Sandbox, configure your repository pool as:

pool: Ecto.Adapters.SQL.Sandbox

(ecto_sql) lib/ecto/adapters/sql/sandbox.ex:491: Ecto.Adapters.SQL.Sandbox.lookup_meta!/1
(ecto_sql) lib/ecto/adapters/sql/sandbox.ex:389: Ecto.Adapters.SQL.Sandbox.mode/2
(elixir) lib/code.ex:767: Code.require_file/2
(elixir) lib/enum.ex:765: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:765: Enum.each/2
(mix) lib/mix/tasks/test.ex:369: Mix.Tasks.Test.run/1
(mix) lib/mix/task.ex:316: Mix.Task.run_task/3
(mix) lib/mix/cli.ex:79: Mix.CLI.run_task/2
(elixir) lib/code.ex:767: Code.require_file/2

显示测试环境没有被加载——可能test_helper.exs还没有被加载?

我可以 运行 这样的任务:MIX_ENV=test mix test.pretty 并且工作正常。我想让这个工作 w/o 每次我 运行 任务时都必须把 MIX_ENV=test 放在那里。在我看来,进行自定义测试的全部意义在于避免必须手动指定该环境和格式化程序参数。

我的工作流程是 运行 mix test,如果有错误,我认为 运行 mix test.pretty 使用自定义格式器机制可以给我很好的测试输出在 ExUnit 中。确定错误后,我可以选择 运行 文件是否漂亮,个人测试是否漂亮等。

谢谢!

您是否尝试过在 mix.exs 文件中设置 preferred_cli_env?

来自: https://hexdocs.pm/mix/master/Mix.Task.html

可能是这样的:

preferred_cli_env: [
  "test.pretty": :test
]

在你的 def project do ... end