我想要两者,通过 Javascript 测试 Ajax 内容和正常切换的内容。
我的设置是:
- rails 3.1
- Rspec(边缘)
- cucumber (边缘)
- capybara (边缘)
例如,如果选择了此模型的某种类型,我想要一个仅显示特定字段的表单:
文章可以是外部文章(url)
或内部。
键入“externa_url”应显示 2 个输入字段和 2 个复选框,然后键入“article”,
它有一个正文文本区域。
实现这一点的最佳方法是什么,也包括测试?
如果它是服务器端的,以便加载部分,如果选择了某种文章类型,
或使用 javascript,切换所需的 html?
最佳答案
实际上受到 Fransico(在评论中)的启发,我写下了我的知识。
我写我自己的答案,它也可以帮助其他人......
首先我想提一下,我回答我的问题——只做集成测试。
用 cucumber 和 Selenium 。
以及使用 Jasmine 进行的特定 javascript 测试。
但是,在使用 cucumber (边缘) rails (3.1)、 capybara 和 Selenium 进行集成测试时,您必须注意一些事项:
看,您已经更新了所有 gem !
1)激活你的驱动程序,如果你还没有
功能/支持/capybara.rb
Capybara.javascript_driver = :selenium
2)目前只有 Firefox <=4 可以使用 webdriver selenium for rails,因为我在从头开始配置和安装每个组件(如机架等)数小时后几乎没有发现。
3)Capybara 本身处理的不多,它可以为您提供点击,例如在列表上,尤其是 jquery-tokeninput。
3.1) 我用它从列表中的标记中选择一个项目:
When(/^I select the option containing "([^\"]*)" in the Tag List/) do |text|
find("li:contains('#{text}')").click
end
你可能会用“locate”找到这个方法而不是find,不要尝试这个,api/driver已经改成find了。
Find 会自动等待并检查 Ajax 响应以及 dom 查找元素。
4) 为您的 JS/Ajax 响应代码添加您自己的 helper/finder/click 例程,
请记住,它“仅”是一个集成测试,您可能想使用 yasmine 或其他 js 测试框架来测试您的 JS 代码。
如需更多信息,请查看 Ryan Bates (http://railscasts.com) 的 Screencasts,他涵盖了几个关于 Rails 测试的主题;检查最新的 Javascript 例如
或者这个博客:http://openmonkey.com/2010/04/09/javascript-testing-with-cucumber-capybara/
(感谢弗朗西斯科)
希望这对其他人也有帮助。
关于ruby-on-rails - 如何使用 Rails Cucumber、rspec、capybara 在 View (dhtml) 中测试动态部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5971990/