2017-02-21 44 views
1

我該如何檢查我的鏈接是否存在,然後點擊它?我試過如下:minitest assert_select with capybara click_link

assert_select "a", "show/hide comments" 
    click_link('show/hide comments') 

我使用MINITEST,水豚,和「MINITEST護欄,水豚」的寶石。我已經加入我的集成測試以下包含語句:

include Capybara::DSL 
include Capybara::Assertions 

我得到以下錯誤:

Unused parameters passed to Capybara::Queries::SelectorQuery : ["show/hide comments"] 
MethodError:   NoMethodError: undefined method `failure_message' for Capybara::Helpers:Module 
      test/integration/user_flow_test.rb:215:in `block in <class:UserFlowTest>' 

我可以同時使用MINITEST的斷言鏈接和水豚的click_link?

感謝

+0

是的,他們一起工作很好。給出這個錯誤的'215'行是什麼? – Iceman

+0

assert_select「a」,「顯示/隱藏評論」我也注意到錯誤消息之前的一些東西:未使用的參數傳遞給Capybara :: Queries :: SelectorQuery:[「顯示/隱藏評論」]或許它認爲這是一個水豚命令,而不是minitest – Ayrad

+0

嗯,我從來沒有真正用過這種方式。我所做的是用水豚與例如'斷言page.has_link? '顯示/隱藏評論' – Iceman

回答

1

首先是沒有必要點擊它,因爲click_link將等待Capybara.default_max_wait_time秒的鏈接出現在頁面上,然後單擊它之前元素的存在斷言。如果鏈接沒有在那個時候出現,它會引發一個錯誤,所以斷言它的存在是多餘的。

你得到的錯誤是因爲minitest-capybara與水豚2.9+ - https://github.com/wojtekmach/minitest-capybara/pull/17不兼容 - 而assert_select不以2個字符串作爲參數。它只需要一個select元素的id,name或label文本。所以我猜這實際上並不是你打電話的方法。

+0

好吧,所以我想這是一個錯誤謝謝。至於assert_select根據這裏的例子http://apidock.com/rails/ActionController/Assertions/SelectorAssertions/assert_select,你可以傳遞兩個字符串ex:assert_select「title」,「Welcome」 – Ayrad

+0

我使用assert_select,因爲click_link('顯示/隱藏評論「)返回false,我想調試,但你說它是多餘的。 – Ayrad

+1

@Ayrad這就是ActionController斷言 - 不是minitest-capybara這就是你通過包括Capybara ::斷言 - https://github.com/wojtekmach/minitest-capybara/blob/master/lib/capybara/assertions。 rb#L171 - 採用與Capybaras相同的參數'has_select?' –