Как обрабатывать перенаправления в Wallaby? - PullRequest
1 голос
/ 04 августа 2020

У меня есть тест функции, написанный следующим образом:

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

Итак, fla sh попадает на перенаправленную страницу, а не на исходную страницу. Как мне дождаться перенаправления и утверждения на новой странице?

Ответы [ 2 ]

1 голос
/ 04 августа 2020
  1. Вы можете просто предоставить таймер сна, например :time.sleep(1000), перед тем, как утверждать над элементом.

  2. Вы можете повторить попытку, например, ожидая обновления страницы. Вы можете использовать Wallaby.retry/2, чтобы повторить попытку, пока окно не обновится по указанному c 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 
0 голосов
/ 24 августа 2020

Попробуйте использовать assert_has(session, css("element ID or class", text: "You have declined."))

У assert есть повторная попытка сборки, поэтому он будет ждать появления этого элемента, поэтому я думаю, что это решит вашу проблему.

...