【问题标题】:Custom mix task not loading test environment自定义混合任务未加载测试环境
【发布时间】:2019-06-24 02:26:50
【问题描述】:

我正在尝试组合一个自定义混合任务,该任务将以专门的方式执行 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 沙箱,请配置您的 存储库为:

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 放在那里,这样就可以正常工作。在我看来,进行自定义测试的全部目的是避免必须手动指定该环境和格式化程序参数。

我的工作流程是运行mix test,如果有错误,我想运行mix test.pretty,它使用ExUnit 中的自定义格式化程序机制为我提供了甜蜜、令人敬畏的测试输出。一旦我确定了错误,我可以选择运行文件是否漂亮,单个测试是否漂亮,等等。

谢谢!

【问题讨论】:

    标签: elixir elixir-mix


    【解决方案1】:

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

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

    大概是这样的:

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

    在你的def project do ... end

    【讨论】:

    • 成功了。非常感谢。
    • 没问题:)。只需在此处添加它,以防有人想知道您为什么不能从脚本中设置它。来自文档:@preferred_cli_env is not loaded from dependencies as we need to know the environment before dependencies are loaded.
    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    相关资源
    最近更新 更多