我使用Capybara编写了一些测试,但我没有使用selenium,也没有使用任何其他JS驱动程序。但我的疑问是,我能否以这种方式测试destroy方法?因为我需要确认JS确认和data-method = "delete"不能访问…
我想做一些非常水豚的方式,像:
访问/人/123,:资料法=> '删除'
你们知道有什么办法可以做到吗?
提前感谢,安德烈
Rails有JavaScript代码从链接的href
和data-method
属性生成表单并提交它;如果没有JS,这将无法工作。
一种测试方法:首先,测试链接和适当属性(href
, data-method
)的存在,然后用Capybara::RackTest::Driver#delete
方法手动触发删除请求。如果您经常这样做,那么编写一个helper方法来包装这两个步骤。
只是要注意@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
。
因此,要像您期望的正常Capybara 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