elixir - 自定义混合任务未加载测试环境
问题描述
我正在尝试组合一个自定义混合任务,该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 中的自定义格式化机制为我提供了甜蜜、令人敬畏的测试输出。一旦我确定了错误,我可以选择运行文件是否漂亮,单个测试是否漂亮,等等。
谢谢!
解决方案
您是否尝试过在 mix.exs 文件中设置 preferred_cli_env ?
来自: https ://hexdocs.pm/mix/master/Mix.Task.html
大概是这样的:
preferred_cli_env: [
"test.pretty": :test
]
在你的def project do ... end
推荐阅读
- php - 输入类型文件未上传名称为 test (copy).csv 的文件
- r - 将向量传递给R中的函数
- tfs - Azure Devops 扩展(构建任务)根据用户操作启用/禁用或显示/隐藏控件
- dialogflow-es - 将谷歌助手与外部聊天机器人数据源集成,而不是在谷歌上唱对话流或动作
- java - 线程池为 7 的 Spring 调度程序不起作用
- python-3.x - 使用 psycopg2 在表中插入值
- java - JavaFX 按钮 minWidth 被忽略
- php - 如何在没有打印对话框窗口的情况下自动打印数据内容(在 Div、表格、表单等上)-(WebClientPrint-Neodynamic)
- android - 在 SMS 上截断 DynamicLink url
- cassandra - Nodetool 加载和拥有的统计信息