Не могу понять эту ошибку.
У меня есть этот файл:
test/support/conn_case.ex
defmodule ProjectWeb.ConnCase do
@moduledoc """
This module defines the test case to be used by
tests that require setting up a connection.
Such tests rely on `Phoenix.ConnTest` and also
import other functionality to make it easier
to build common datastructures and query the data layer.
Finally, if the test case interacts with the database,
it cannot be async. For this reason, every test runs
inside a transaction which is reset at the beginning
of the test unless the test case is marked as async.
"""
use ExUnit.CaseTemplate
using do
quote do
# Import conveniences for testing with connections
use Phoenix.ConnTest
import ProjectWeb.Router.Helpers
# The default endpoint for testing
@endpoint ProjectWeb.Endpoint
end
end
end
А этот конфиг на mix.ex
# Specifies which paths to compile per environment.
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
Есть тест на test/controllers/page_controller_test.exs
defmodule ProjectWeb.PageControllerTest do
use ProjectWeb.ConnCase
test "GET /", %{conn: conn} do
conn = get conn, "/"
assert html_response(conn, 200) =~ "OK"
end
end
Тем не менее при запуске mix test я получаю:
** (CompileError) test/controllers/page_controller_test.exs:2: module ProjectWeb.ConnCase is not loaded and could not be found
Это может быть полезно: github.com/phoenixframework/phoenix/issues/2405





Для всех, кто сталкивался с этим, возможно, у вас была та же проблема, что и у меня -> MIX_ENV по умолчанию установлен на dev. Если это так, вы можете легко проверить это, запустив MIX_ENV=test mix test, это установит среду для одного вызова. Если это сработает, у вас есть обходной путь и более постоянный, который я описал ниже.
Текущий способ, которым я это исправил, - это изменить mix.exs, чтобы он выглядел примерно так:
defmodule MyApp.MixProject do
use Mix.Project
def project do
[
...
elixirc_paths: elixirc_paths(Mix.env()),
...
]
end
# Configuration for the OTP application.
#
# Type `mix help compile.app` for more information.
def application do
[
mod: {MyApp.Application, []},
extra_applications: [:logger, :runtime_tools]
]
end
# Specifies which paths to compile per environment.
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(:dev), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
# Specifies your project dependencies.
#
# Type `mix help deps` for examples and options.
defp deps do
[
...
]
end
end
Важный бит, который здесь отличается от mix.exs по умолчанию, - это определение elixirrc_paths в блоке def project (это уже должно совпадать, но если нет, то должно) и добавление строки defp elixirc_paths(:dev), do: ["lib", "test/support"]
Возможно, это не совсем идиоматично, но при использовании среды dev mix это гарантирует, что ваши тесты также скомпилированы, и по-прежнему позволяет вам отдельно определять среду разработки и тестирования.
Обновлено: Идиоматично, кажется, практика заключается в том, чтобы вручную установить env, а не bork dev ENV, чтобы заставить его правильно запускать ваши тесты. Вам следует просто использовать MIX_ENV=test mix test для достижения своих целей, поскольку изменение среды разработки нежелательно в большинстве ситуаций.
Вы когда-нибудь получали на это ответ?