如何配置test_pattern进行混合测试

时间:2018-03-19 04:25:44

标签: elixir mix

我想更改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?"

1 个答案:

答案 0 :(得分:1)

为什么您认为config :server中的任何更改会导致副作用? Mix.Config.config/3是一个简单的宏,它将值存储在配置存储中以供将来使用。它不执行任何代码也没有任何副作用。

更重要的是,您尝试放置test_pattern密钥的部分是Server.Repo,由Ecto.Repo读取,而后者对如何处理{{1}一无所知密钥并有效地忽略它。

作为旁注,我会说改变测试模式以包含编译的test_pattern文件通常听起来不是一个好主意;默认情况下,这些文件将被1)编译并且2)包含在发行版中。他们故意进行*.ex扩展:尾随“s”代表“脚本”,前提是文件将被视为脚本。

此外,如果你仍然肯定你想要这种模式,那么通过*.exs配置配置它就是它所属的地方。这不是任何方法,这是改变模式的预期方式。