如何使用rails cucumber,rspec,capybara在视图(dhtml)中测试动态部分?

Posted

技术标签:

【中文标题】如何使用rails cucumber,rspec,capybara在视图(dhtml)中测试动态部分?【英文标题】:how to test dynamic parts in a view (dhtml) with rails cucumber, rspec, capybara? 【发布时间】:2011-05-12 00:13:56 【问题描述】:

我想要两者,通过 javascript 测试 Ajax 内容和正常切换的内容。

我的设置是:

- 导轨 3.1 - Rspec(边缘) - 黄瓜(边缘) - 水豚(边缘)

例如,我想要一个表单,如果选择了该模型的某种类型,则该表单仅显示特定字段:

文章可以是外部文章(网址) 或内部。 键入“externa_url”应显示 2 个输入字段和 2 个复选框,然后键入“article”, 它有一个正文文本区域。

实现这一点的最佳方法是什么,以及测试?

是否应该是服务器端的,以便加载部分,如果选择了某种文章类型, 还是使用 javascript,切换所需的 html

【问题讨论】:

已经有一个关于这个主题的截屏视频,但它并不完全符合我的需求,所以很难找到一个常见的最佳实践。 这符合您的需求吗? openmonkey.com/2010/04/09/… 是的,实际上我也发现只有这个......在其他关于硒测试的文章中。 【参考方案1】:

实际上受到 Fransico(在 cmets 中)的启发,我写下了我的知识。 我写自己的答案,它也可能对其他人有所帮助....

首先我想提一下,我回答我的问题 - 只做集成测试。 用黄瓜和硒。 并使用 jasmine 进行特定的 javascript 测试。

但是,当使用 cucumber (edge) rails (3.1)、capybara 和 selenium 进行集成测试时,您必须注意一些事项:

看,你的所有宝石都更新了!

1) 激活您的驱动程序(如果您还没有)

功能/支持/capybara.rb

Capybara.javascript_driver = :selenium

2) 目前只有 Firefox

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),他涵盖了有关测试 Rails 的几个主题;检查 Javascript 的最新版本,例如

或者这个博客:http://openmonkey.com/2010/04/09/javascript-testing-with-cucumber-capybara/ (谢谢弗朗西斯科)

希望这对其他人也有帮助。

【讨论】:

不客气。 AFAIK 除了硒之外,您还可以将其他驱动程序与水豚一起使用。我从 akephalos github.com/bernerdschaefer/akephalos 那里听到了很好的消息,也许值得一看。

以上是关于如何使用rails cucumber,rspec,capybara在视图(dhtml)中测试动态部分?的主要内容,如果未能解决你的问题,请参考以下文章

RSpec 和 Cucumber 有啥区别? [关闭]

Rails Cucumber使用Capybara测试AJAX

集成测试ActionMailer和ActiveJob

使用 RSpec 测试 Rails 辅助方法时如何在参数哈希中设置值?

如何使用 RSpec 在 Rails 中测试:包含验证

在创建新的 Rails 应用程序时,如何告诉 Rails 使用 RSpec 而不是 test-unit?