自定义搭配的任务不加载测试环境

时间:2019-01-30 18:01:50

标签: elixir mix

我正在尝试组合一个定制混合任务,该任务将以专门的方式执行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)无法使用池DBConnection.ConnectionPool调用沙箱操作。要使用SQL Sandbox,请配置您的   库池为:

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,它可以正常工作。我希望每次运行任务时都不必在其中放置MIX_ENV = test来使此工作正常进行。在我看来,进行自定义测试的全部目的是避免必须手动指定该环境和formatter参数。

我的工作流程是运行mix test,如果有错误,我想运行mix test.pretty这给了我甜蜜的,使用自定义格式在ExUnit机制真棒测试输出。确定错误后,可以选择是否运行文件,是否运行单个测试,等等。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

发件人: https://hexdocs.pm/mix/master/Mix.Task.html

可能类似于:

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

在您的def project do ... end