Могу ли я разделить вспомогательные модули на разные файлы, используя ExUnit с Mix?

Пара неудачных попыток и документация здесь заставляют меня поверить что мне нужно либо определить вспомогательные модули в test/test_helper.exs, либо в одном из других файлов test/*.exs, вложенных в модуль (этот use ExUnit.Case) в моем микс-проекте. Есть ли способ определить эти модули в их собственных файлах, чтобы тесты могли их использовать, не загромождая test/test_helper.exs и не помещая их в lib/?


person matthiasdenu    schedule 25.12.2018    source источник


Ответы (1)


В вашем файле mix.exs вы определяете разные пути для разных сред в объявлении проекта (внутри обратного вызова Mix.Project.project/0, ключ elixirc_paths:

defmodule MyApp.MixProject do
  use Mix.Project

  def project do
    [
      ...
      elixirc_paths: elixirc_paths(Mix.env()),
      ...
    ]
  end

Затем вы предоставляете разные предложения для разных сред:

defp elixirc_paths(:test), do: ["lib", "test/helpers"]
defp elixirc_paths(_), do: ["lib"]

Указанные выше пути будут добавлены к тому, что компилируется Elixir, и весь код в каталоге test/helpers станет доступным во время выполнения при запуске проекта только в среде test.

person Aleksei Matiushkin    schedule 26.12.2018
comment
Потрясающий. Это сработало, спасибо. Еще одна деталь: вспомогательные модули должны иметь расширение .ex. Я понял это в конце концов. - person matthiasdenu; 26.12.2018
comment
@matthiasdenu хорошо, я догадался, что обязательное расширение скомпилированного модуля ex (в отличие от скрипта эликсира exs) здесь выходит за рамки, поскольку это соглашение для всего Эликсира, в котором по сути ничего нет делать с ОП :) - person Aleksei Matiushkin; 26.12.2018