迷你测试 assert_select 与水豚 click_link

minitest assert_select with capybara click_link

如何检查我的 link 是否存在,然后点击它?我尝试了以下方法:

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

我正在使用 minitest、水豚和 'minitest-rails-capybara' gem。我在集成测试中添加了以下包含语句:

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 的断言 link 和水豚的 click_link 吗?

谢谢

首先,在单击某个元素之前无需断言它是否存在,因为 click_link 将等待 Capybara.default_max_wait_time 秒让 link 出现在页面上,并且然后点击它。如果 link 在那段时间内没有出现,则会引发错误,因此断言它的存在是多余的。

您遇到的错误是因为 minitest-capybara 与 Capybara 2.9+ 不兼容 - https://github.com/wojtekmach/minitest-capybara/pull/17 - 而且 assert_select 不接受 2 个字符串作为参数。它只需要 select 元素的 ID、名称或标签文本。所以我猜这实际上不是您要调用的方法。

澄清之前的回答:

错误:

assert_select "a", "show/hide comments"

正确:

assert_select "a", text: "show/hide comments"