4

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

我的设置是:

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

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

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

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

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

4

1 回答 1

2

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

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

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

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

1)激活你的驱动程序,如果你还没有

功能/支持/capybara.rb

Capybara.javascript_driver = :selenium

2)目前只有 Firefox <=4 可以与 webdriver selenium 一起使用,因为我在从头开始配置和安装每个组件(如机架等)几个小时后才发现。

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/ (thnx francisco)

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

于 2011-06-03T06:28:09.450 回答