如何配置 test_pattern 进行混合测试
How to configure test_pattern for mix test
我想将 test_pattern
更改为 mix test
,但我无法找到执行此配置的正确方法。我在 config/test.exs
中尝试了多种配置变体,但从未弄清楚。最终我发现更改 mix.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 test
执行配置的正确方法是什么?
我通过查看 this LOC 并尝试让我的项目配置符合该检查,从而遇到了这个 hack。我怀疑有更好的方法来实现我想要的。
这是我的 config/test.exs
文件现在的样子(有一些评论)
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?"
为什么您认为 config :server
中的任何更改都会导致 side-effects? Mix.Config.config/3
是一个简单的宏,它将值存储在配置存储中以供将来使用。它不执行任何代码,也没有任何 side-effects.
更重要的是,您尝试放置 test_pattern
键的部分是 Server.Repo
,它由 Ecto.Repo
读取,而后者对如何处理 test_pattern
键并有效地忽略它。
作为旁注,我想说改变测试模式以包含已编译的 *.ex
文件通常听起来不是一个好主意;默认情况下,这些文件将被 1) 编译和 2) 包含在发布中。他们有意 *.exs
扩展名:尾随的“s”代表“脚本”,前提是文件将被视为脚本。
另外,如果你仍然确定你想要这个模式,通过 project
配置来配置它正是它所属的地方。这绝不是黑客攻击,这是改变模式的预期方式。
我想将 test_pattern
更改为 mix test
,但我无法找到执行此配置的正确方法。我在 config/test.exs
中尝试了多种配置变体,但从未弄清楚。最终我发现更改 mix.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 test
执行配置的正确方法是什么?
我通过查看 this LOC 并尝试让我的项目配置符合该检查,从而遇到了这个 hack。我怀疑有更好的方法来实现我想要的。
这是我的 config/test.exs
文件现在的样子(有一些评论)
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?"
为什么您认为 config :server
中的任何更改都会导致 side-effects? Mix.Config.config/3
是一个简单的宏,它将值存储在配置存储中以供将来使用。它不执行任何代码,也没有任何 side-effects.
更重要的是,您尝试放置 test_pattern
键的部分是 Server.Repo
,它由 Ecto.Repo
读取,而后者对如何处理 test_pattern
键并有效地忽略它。
作为旁注,我想说改变测试模式以包含已编译的 *.ex
文件通常听起来不是一个好主意;默认情况下,这些文件将被 1) 编译和 2) 包含在发布中。他们有意 *.exs
扩展名:尾随的“s”代表“脚本”,前提是文件将被视为脚本。
另外,如果你仍然确定你想要这个模式,通过 project
配置来配置它正是它所属的地方。这绝不是黑客攻击,这是改变模式的预期方式。