ConnCase tests with different root path verified-routes warnings


I have created an api application with phoenix 1.7.2 . I have to change the root path for the application because it is located behind a reverse proxy. To achieve this I made the following changes:
In the config.exs I change the Endpoint configuration by adding the path

config :my_app, MyAppWeb.Endpoint,
  url: [host: "localhost", path: "/v2"]

Then I configure static resources by changing the plug in endpoint.ex

plug Plug.Static,
  at: "/v2",
  from: :my_app,
  gzip: false,
  only: MyAppWeb.static_paths()

(Even though it is a api webservice, it has a static page if you access it in a browser)

Finally I added a scope to the router.ex

scope "/v2" do
    scope "/", MyAppWeb do
      pipe_through :browser

      get "/", PageController, :home

    scope "/api", MyAppWeb do
      pipe_through :api

      post "/stuff", StuffController, :post
      get "/stuff", StuffController, :get

This works but when I try to write tests for this configuration, I get lots of verified-routes warning. My issues is, when I use the route like ~p"/api/stuff" the tests execute successfully but produce warnings link warning: no route path for MyApp.Router matches "/api/stuff". When I change the url to incorporate the different root ~p"/v2/api/stuff", the warning is gone but it doesn’t work anymore because the p sigil is resolved to /v2/v2/license/activate.

I’m sure I am just missing some configuration somewhere but I cant figure out where.

Thanks for your help!

I’d suggest creating an issue on github about that. It sounds like a setup not well considered with verified routes.

If it is a bug, can you manually manipulate %Conn{} for now to set whatever :at sets? I do a similar thing when testing subdomain routes:

  def admin_live(%{conn: conn}) do
    conn = %{conn | host: "admin.myapp.local"}

    %{conn: conn}

  # ...

  setup :admin_live
1 Like

I fixed the issue by overriding the :path attribute of the Endpoint with "/" in the test configuration. The subpath has to be included in the sigil then ~p"/v2/api/stuff".

config :my_app, MyAppWeb.Endpoint,
  http: [ip: {127, 0, 0, 1}, port: 4002],
  url: [path: "/"],

Thanks to: ConnCase tests with different root path verified-routes warnings · Issue #5476 · phoenixframework/phoenix · GitHub

1 Like