Как обрабатывать перенаправления в Wallaby?
У меня есть такой тест функций:
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))
Таким образом, мигает перенаправленная страница, а не исходная. Как я могу дождаться перенаправления и утверждения на новой странице?
2 ответа
Вы можете просто предоставить таймер сна, например
:time.sleep(1000)
перед утверждением над элементом.Вы можете повторить попытку, как будто дожидаясь обновления страницы. Вы можете использовать
Wallaby.retry/2
чтобы повторить попытку, пока окно не обновится по определенному URL-адресу. Мы можем получить текущий URL-адрес окна, используяWallaby.current_url/1
. Код будет выглядеть примерно так.
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
Попробуй использоватьassert_has(session, css("element ID or class", text: "You have declined."))
У assert есть встроенная повторная попытка, поэтому он будет ждать появления этого элемента, поэтому я думаю, что это решит вашу проблему.