测试用水豚破坏方法

时间:2011-05-03 14:55:46

标签: javascript ruby-on-rails-3 capybara destroy

我使用Capybara编写了一些测试,但我没有使用selenium,也没有使用任何其他JS驱动程序。但我怀疑的是,我是否可以通过这种方式测试破坏方法?由于我需要确认JS确认并且无法访问data-method =“delete”...

我想像Capybara那样做:

访问'/ people / 123',:data-method => '删除'

你们知道有没有办法做到这一点?

提前致谢, 安德烈

2 个答案:

答案 0 :(得分:4)

Rails有JavaScript代码,可以从链接的hrefdata-method属性生成表单并提交它;没有JS,这是行不通的。

测试此方法的一种方法:首先,测试是否存在链接和适当的属性(hrefdata-method),然后使用Capybara::RackTest::Driver#delete method手动触发删除请求。如果经常这样做,请编写一个包含这两个步骤的辅助方法。

答案 1 :(得分:4)

请注意@Mike Mazur的回答,如果您的控制器对#destroy操作进行了重定向,则在Capybara的驱动程序上调用delete方法实际上并不遵循重定向。相反,它只是使用重定向消息填充response,即body == <html><body>You are being <a href=\"http://www.example.com/model_names\">redirected</a>.</body></html>status_code == 302

因此,要像普通的水豚click_button 'Delete Model'一样填充所有内容,您需要手动关注重定向。一种(无意义和RSpec风格)的方法:

Capybara.current_session.driver.delete controller_path(model_instance)
Capybara.current_session.driver.response.should be_redirect
visit Capybara.current_session.driver.response.location