如何使用render_change结果匹配特定元素?
How to use render_change result to match specific element?
我正在使用 render_change/2
测试 LiveView 表单
html =
view
|> element("#filter-form")
|> render_change(%{filter: %{days: "14"}})
我得到的结果是一个包含渲染的字符串html。
我想 assert
结果有一些特定的元素。可以用 element/2 这样的函数来完成
assert view |> element("#target", "test") |> has_element?()
但它只接受 LiveView 的实例,而不是 html 字符串。
断言 render_change/2
结果将包含带有特定文本的特定标签的最佳方法是什么?
您可以通过三种主要方式验证这一点。
第一个也是最简单的方法是将更新后的 HTML 与元素中的某些特定文本进行比较。所以,像这样:
html =
view
|> element("#filter-form")
|> render_change(%{filter: %{days: "14"}})
assert html =~ "my specific text"
另一种方法是使用 Floki 解析 HTML 并找到您想要的元素,例如:
html =
view
|> element("#filter-form")
|> render_change(%{filter: %{days: "14"}})
assert [element] =
html
|> Floki.parse_document!()
|> Floki.find("#target")
并且 element
您还可以验证特定属性。
最后一个正是您建议的。 LiveView 测试中使用的 view
是处理事件的参考。因此,当您调用 render_*
测试辅助函数时,该函数的状态会发生变化。所以:
assert view |> element("#target", "test") |> has_element?()
通常应该可以工作。
我正在使用 render_change/2
测试 LiveView 表单html =
view
|> element("#filter-form")
|> render_change(%{filter: %{days: "14"}})
我得到的结果是一个包含渲染的字符串html。
我想 assert
结果有一些特定的元素。可以用 element/2 这样的函数来完成
assert view |> element("#target", "test") |> has_element?()
但它只接受 LiveView 的实例,而不是 html 字符串。
断言 render_change/2
结果将包含带有特定文本的特定标签的最佳方法是什么?
您可以通过三种主要方式验证这一点。
第一个也是最简单的方法是将更新后的 HTML 与元素中的某些特定文本进行比较。所以,像这样:
html =
view
|> element("#filter-form")
|> render_change(%{filter: %{days: "14"}})
assert html =~ "my specific text"
另一种方法是使用 Floki 解析 HTML 并找到您想要的元素,例如:
html =
view
|> element("#filter-form")
|> render_change(%{filter: %{days: "14"}})
assert [element] =
html
|> Floki.parse_document!()
|> Floki.find("#target")
并且 element
您还可以验证特定属性。
最后一个正是您建议的。 LiveView 测试中使用的 view
是处理事件的参考。因此,当您调用 render_*
测试辅助函数时,该函数的状态会发生变化。所以:
assert view |> element("#target", "test") |> has_element?()
通常应该可以工作。