Hi Ben,
I’m looking for actual test coverage.
With regard to the (ignore_modules) answer this would feel acceptable:
test_coverage: [
ignore_modules: [
# DemoWeb.Layouts,
# DemoWeb.PageHTML,
# DemoWeb.CoreComponents,
Demo.DataCase,
Demo.Repo,
# DemoWeb.ErrorHTML,
Demo.Application,
DemoWeb.Router,
DemoWeb.Telemetry
]
]
To exclude every single view does not feel acceptable.
I don’t know how to make a view pass any test.
With regard to CoreComponents it would be nice to have a working example.
Then we could update the tests after making changes to (modules using) CoreComponents.
While on the topic of testing phoenix applications,
I find myself putting this kind of not very pretty code into ConnCase:
using do
quote do
# ...
def put_session(conn, session) when is_map(session) do
Enum.reduce session, conn, fn {k, v}, c ->
put_session c, k, v
end
end
def run(conn, session \\ %{}, fun) do
old = conn
|> build_conn
|> put_session(session)
|> load_cookies
ref = "#{conn.scheme}://#{conn.host}"
|> Path.join(conn.request_path)
build_conn()
|> put_skb
|> Plug.Test.recycle_cookies(old)
|> put_req_header("referer", ref)
|> fun.()
end
def build_conn(%{resp_cookies: resp_cookies}) do
build_conn()
|> put_skb
|> put_cookies(resp_cookies)
|> fetch_session
end
defp put_skb(%_{secret_key_base: nil} = conn) do
conn
|> Map.put(:secret_key_base, @skb)
|> Plug.Session.call(@session_opts)
end
defp put_skb(conn), do: conn
defp load_cookies(%_{private: private} = conn) do
Enum.reduce(private[:before_send] || [], %{conn | state: :set}, & &1.(&2))
end
defp put_cookies(conn, resp_cookies \\ nil) do
Enum.reduce resp_cookies || conn.resp_cookies, conn, fn {key, %{value: value}}, acc ->
put_req_cookie acc, key, value
end
end
end
end
In order to test all kinds of scenario’s involving sessions / cookies.
Probably this kind of code shouldn’t be necessary.