我如何click_link与Capybara有一个方法:: post?

时间:2015-02-11 14:49:07

标签: ruby-on-rails ruby rspec capybara

在我的申请中,我有这个链接:

link_to 'Start', some_path, method: :post

并且,在功能测试中,我需要单击此链接,然后断言该页面不包含此链接(相反,它应包含“停止”链接)

我试图:

click_link 'Start'

但它不起作用 - 链接Start仍然在页面上,或者我正在获得一个带有“重定向”文本的页面(我使用save_and_open_page)

如何解决此问题?

编辑:我正在使用吵闹的司机。

2 个答案:

答案 0 :(得分:1)

为避免js /浏览器开销,您还可以使用纯ruby进行虚假点击。 例如click_ujs_link "Send"使用此代码。

def click_ujs_link(name)
  link = find(:link, name, {})
  visit_with_method link['data-method'], link['href']
end

def visit_with_method(method, url)
  page.driver.send method, url
  visit page.driver.response.location
end

答案 1 :(得分:0)

要回答我自己的问题,解决方案很简单:只需在包含链接的方案中设置js:true,例如:

scenario 'some description', js: true do

解释:对于使用GET以外的方法的链接,Rails.js动态生成一个表单,如下所示

<a href="url" data-method="post" rel="nofollow">...</a>

所以你需要告诉Capybara它应该使用javascript引擎运行场景(在我们的例子中是poltergeist),你可以通过js:true选项来运行。