aprs.me/test/aprsme_web/components/error_boundary_test.exs

55 lines
1.6 KiB
Elixir

defmodule AprsmeWeb.Components.ErrorBoundaryTest do
use ExUnit.Case, async: true
import Phoenix.LiveViewTest
alias AprsmeWeb.Components.ErrorBoundary
test "renders inner content and default fallback" do
html =
render_component(&ErrorBoundary.error_boundary/1, %{
id: "boundary-1",
inner_block: text_slot("hello world"),
fallback: []
})
assert html =~ ~s(id="boundary-1")
assert html =~ "hello world"
assert html =~ "phx-hook=\"ErrorBoundary\""
assert html =~ "error-boundary-fallback hidden"
# The default error message is rendered when no fallback slot is provided.
assert html =~ "Something went wrong"
assert html =~ "Refresh page"
end
test "honours custom class" do
html =
render_component(&ErrorBoundary.error_boundary/1, %{
id: "boundary-2",
class: "my-custom-class",
inner_block: text_slot("content"),
fallback: []
})
assert html =~ "my-custom-class"
end
test "uses the custom fallback slot when provided" do
html =
render_component(&ErrorBoundary.error_boundary/1, %{
id: "boundary-3",
inner_block: text_slot("content"),
fallback: [
%{__slot__: :fallback, inner_block: fn _changed, _ -> "custom error!" end}
]
})
assert html =~ "custom error!"
# Default error message should not appear when a custom fallback is used.
refute html =~ "Something went wrong"
end
defp text_slot(text) do
[%{__slot__: :inner_block, inner_block: fn _changed, _ -> text end}]
end
end