6

嗨,我的应用程序中没有任何前端。我愿意只发布一个可供不同客户端使用的 RESTful API。任何指示我应该如何继续用黄瓜测试它?控制器中的每个操作仅生成 XML 提要。任何指示或建议?

4

5 回答 5

9

webrat的visit函数接受 http_method 作为第二个参数。您还可以像以下黄瓜规则一样测试您的 api:

When /^I restfully delete (?:|the )user "([^\"]*)"$/ do |login|
  visit(path_to("user \"#{login}\" page"), :delete)
end
于 2010-03-27T20:09:29.750 回答
7

我认为 Webrat 不仅仅是您所需要的。对于 XML 提要测试,您不需要像 Webrat 这样的浏览器模拟器,它会在您确实没有任何 HTML 页面时加载页面并分析所有标记(链接、表单等)。

您宁愿需要像 Curl ( http://curl.haxx.se ) 或 Curb (在 ruby​​forge 上,它们是 Curl 的 ruby​​ 绑定) 或 Patron (在 ruby​​forge 上) 之类的东西。

这些库可以根据您的喜好制作请求标头(例如设置 Content-Type,在 GET PUT POST DELETE HEAD 等中进行选择)并获得响应,并且可能在需要时遵循 302 重定向。

返回的响应随后可以转换为 XML 对象,并且可用于 Ruby 的 XML 解析器可用于测试输出。此外,您可以编写 XMLMapping 类(在 ruby​​forge 上)将 XML 输出转换为 Ruby 对象并测试它们的属性等。恕我直言,这更干净。

于 2009-07-27T04:13:28.240 回答
5

jayzes 分享了他的黄瓜测试步骤示例,使用 Rack::Test::Methods、JSONpath、Nokogiri 等为 json/xml API 编写测试,您可能希望参考并为自己的步骤创建更多。

https://github.com/jayzes/cucumber-api-steps

于 2011-04-26T09:40:37.547 回答
2

设置好 RESTful 路由后,您应该能够使用 Webrat 访问不同的路由。然后,您可以测试每个路由是否返回符合您期望的 XML。

这是一篇描述如何在 RSpec 中测试 XML 输出的博客文章: 测试 XML 输出

Webrat是一个无头浏览器,这仅仅意味着您可以模拟一个浏览器,而无需在您的开发机器上打开像 FireFox 这样的真实浏览器。这意味着您可以在定义的步骤中简单地键入“访问'users/'”之类的内容并模拟用户访问您的应用程序。

最后,关于 RSpec 的 Pragmatic 书籍(仍处于测试阶段)是一个很好的资源,它介绍了如何一起使用 Cucumber、Webrat 和 RSpec 并使用 BDD 推动您的应用程序开发。

于 2009-07-26T07:37:30.247 回答
0

我试图这样做并且陷入了restful_authentication的一个主要问题(使用AASM,它似乎是restful_auth的内部模型之一)并获得了该解决方案以登录:

Given /^I am logged in with a new account$/ do  
  login = "test"
  @current_user = User.new(
     :login => login,
     :password => 'generic',
     :password_confirmation => 'generic',
     :email => "#{login}@example.com",
     :state => "active"
   )
   @current_user.save
   x = User.find_by_login(login)
   x.state = "active"
   x.save!

   visit "/login" 
   fill_in("login", :with => login) 
   fill_in("password", :with => 'generic') 
   click_button
   response.body.should =~ /Logged in successfully/m
end

将其模块化以便更清洁的测试语料库,这是为了演示我发现的概念。

于 2011-02-08T15:03:03.477 回答