Если вы прочитали документацию mix test
:
Эта задача запускает текущее приложение, загружает test/test_helper.exs
, а затем требует все файлы, соответствующие test/**/*_test.exs
шаблон параллельно.
Вы были правы, что .exs
файлы не скомпилированы, однако это не проблема, если они даже были скомпилированы. Тесты выполняются как сценарии, чтобы избежать многократной компиляции, так как они каждый раз получают случайный порядок с разной выходной компиляцией.
Задача сначала компилирует все файлы, затем запускает ExUnit
и расширяет все макросы из *_test.exs
скриптов. Чтобы доказать это, взгляните на этот фрагмент кода :
defmacro __using__(opts) do
unless Process.whereis(ExUnit.Server) do
raise "cannot use ExUnit.Case without starting the ExUnit application, " <>
"please call ExUnit.start() or explicitly start the :ex_unit app"
end
Это означает, что в файлах, где вы используете use ExUnit.Case
, сервер ExUnit
должен быть запущен и работать на момент, когда эти сценарии интерпретируются.
В общем, в вашем случае, даже после изменения на .exs
ваши тесты не должны были работать, поскольку при конфигурации по умолчанию путь к тестам :
defp default_test_paths do
if File.dir?("test") do
["test"]
else
[]
end
Вместо этого вы должны были вызвать тесты с:
mix test test/some/particular/file_test.exs