1

我正在使用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结果将具有带有特定文本的特定标签的最佳方法是什么?

4

1 回答 1

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?()

通常应该工作。

于 2021-04-01T14:23:29.377 回答