我想更改test_pattern
的{{1}},但我无法找到执行此配置的正确方法。我在mix test
中尝试了多种配置变体,但从来没有弄明白。最终我发现更改config/test.exs
(我认为是最高级别的配置文件)有效:
defmodule Server.Mixfile do use Mix.Project def project do [ app: :server, version: "0.0.1", elixir: "~> 1.4", elixirc_paths: elixirc_paths(Mix.env), compilers: [:phoenix, :gettext] ++ Mix.compilers, start_permanent: Mix.env == :prod, aliases: aliases(), deps: deps(), test_pattern: "*_test.ex", # ----- this is what worked! ] end # more config stuff end
为mix.exs
执行配置的正确方法是什么?
我通过查看this LOC并尝试让我的项目配置符合该检查来遇到此黑客攻击。我怀疑有更好的方法来达到我想要的目的。
这是我的mix test
文件现在的样子(带有一些评论)
use Mix.Config # We don't run a server during test. If one is required, # you can enable the server option below. config :server, ServerWeb.Endpoint, http: [ port: 4001 ], server: false # Print only warnings and errors during test config :logger, level: :warn config :server, Server.Repo, adapter: Ecto.Adapters.Postgres, username: System.get_env("POSTGRES_USER") || "postgres", password: System.get_env("POSTGRES_PASSWORD") || "postgres", database: System.get_env("POSTGRES_DB") || "postgres", hostname: System.get_env("POSTGRES_HOST") || "localhost", pool: Ecto.Adapters.SQL.Sandbox # test_pattern: "*_test.ex" ---- this doesn't get picked up #config :project, ------------- this complains about the application "project" not being available # test_pattern: "*_test.exs?"
答案 0 :(得分:1)
为什么您认为config :server
中的任何更改会导致副作用? Mix.Config.config/3
是一个简单的宏,它将值存储在配置存储中以供将来使用。它不执行任何代码也没有任何副作用。
更重要的是,您尝试放置test_pattern
密钥的部分是Server.Repo
,由Ecto.Repo
读取,而后者对如何处理{{1}一无所知密钥并有效地忽略它。
作为旁注,我会说改变测试模式以包含编译的test_pattern
文件通常听起来不是一个好主意;默认情况下,这些文件将被1)编译并且2)包含在发行版中。他们故意进行*.ex
扩展:尾随“s”代表“脚本”,前提是文件将被视为脚本。
此外,如果你仍然肯定你想要这种模式,那么通过*.exs
配置配置它就是它所属的地方。这不是任何方法,这是改变模式的预期方式。