ruby-on-rails - 如何使用 Rails Cucumber、rspec、capybara 在 View (dhtml) 中测试动态部件?

标签 ruby-on-rails view cucumber capybara jasmine

我想要两者,通过 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/

相关文章:

java - 数量与 Java Cucumber 数据表不匹配

ruby-on-rails - 如何在 click_link/button 之后在rails中使用 cucumber 和 capybara 跟随重定向?

ruby-on-rails - 无法连接到 ec2 服务器上的 rds,缺少 mysql 套接字

ruby-on-rails - 在生产环境中使用 Capistrano 的 Rails 多环境凭证 : How to set it up?

ruby-on-rails - 知道@vendor.name 后如何使 Ruby on Rails 中的 URL 对 SEO 友好?

view - 应用程序中的 iphone map View

Cocoa 加载 ViewNib

python - Django find_each(如 RoR)

mysql - 加快 MySQL 中的 View 速度

java - Maven 测试不使用 Spring Boot 2.2 和 JUnit 5 运行 Cucumber 场景