我有这样的功能测试:
confirmation_page = visit(session, "/confirm/#{id}")
confirmation_page
|> click(link("Decline"))
confirmation_page
|> assert_text("You have declined.")
但是测试始终失败,因为在控制器中,单击此页面时,我正在执行此操作:
conn
|> put_flash(:info, "You have declined.")
|> redirect(to: Routes.group_path(conn, :show, group.slug))
因此,闪光灯即将出现在重定向页面上,而不是原始页面上。如何等待重定向并在新页面上断言?
答案 0 :(得分:1)
您可以在声明over元素之前简单地提供一个:time.sleep(1000)
之类的睡眠计时器。
您可以重试,例如等待页面刷新。您可以使用Wallaby.retry/2
重试,直到刷新特定URL上的窗口为止。我们可以使用Wallaby.current_url/1
获取窗口的当前URL。代码看起来像这样。
1 retry = fn -> if Wallaby.current_url == "expected" do
2 ┆ ┆ ┆ assert_text(confirmation_page)
3 ┆ ┆ ┆ else
4 ┆ ┆ ┆ {:error, :url_not_refreshed}
5 ┆ ┆ ┆end
6 ┆ end
7
8 assert {:ok, response} = Wallaby.retry(retry, 5000) ## default timeout option after which it
答案 1 :(得分:0)
尝试使用
assert_has(session, css("element ID or class", text: "You have declined."))
assert已重试,因此它将等待此元素显示,因此我认为它将解决您的问题。