我使用Capybara编写了一些测试,但我没有使用selenium,也没有使用任何其他JS驱动程序。但我怀疑的是,我是否可以通过这种方式测试破坏方法?由于我需要确认JS确认并且无法访问data-method =“delete”...
我想像Capybara那样做:
访问'/ people / 123',:data-method => '删除'
你们知道有没有办法做到这一点?
提前致谢, 安德烈
答案 0 :(得分:4)
Rails有JavaScript代码,可以从链接的href
和data-method
属性生成表单并提交它;没有JS,这是行不通的。
测试此方法的一种方法:首先,测试是否存在链接和适当的属性(href
,data-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