嗨,我的应用程序中没有任何前端。我愿意只发布一个可供不同客户端使用的 RESTful API。任何指示我应该如何继续用黄瓜测试它?控制器中的每个操作仅生成 XML 提要。任何指示或建议?
5 回答
webrat的visit
函数接受 http_method 作为第二个参数。您还可以像以下黄瓜规则一样测试您的 api:
When /^I restfully delete (?:|the )user "([^\"]*)"$/ do |login|
visit(path_to("user \"#{login}\" page"), :delete)
end
我认为 Webrat 不仅仅是您所需要的。对于 XML 提要测试,您不需要像 Webrat 这样的浏览器模拟器,它会在您确实没有任何 HTML 页面时加载页面并分析所有标记(链接、表单等)。
您宁愿需要像 Curl ( http://curl.haxx.se ) 或 Curb (在 rubyforge 上,它们是 Curl 的 ruby 绑定) 或 Patron (在 rubyforge 上) 之类的东西。
这些库可以根据您的喜好制作请求标头(例如设置 Content-Type,在 GET PUT POST DELETE HEAD 等中进行选择)并获得响应,并且可能在需要时遵循 302 重定向。
返回的响应随后可以转换为 XML 对象,并且可用于 Ruby 的 XML 解析器可用于测试输出。此外,您可以编写 XMLMapping 类(在 rubyforge 上)将 XML 输出转换为 Ruby 对象并测试它们的属性等。恕我直言,这更干净。
jayzes 分享了他的黄瓜测试步骤示例,使用 Rack::Test::Methods、JSONpath、Nokogiri 等为 json/xml API 编写测试,您可能希望参考并为自己的步骤创建更多。
设置好 RESTful 路由后,您应该能够使用 Webrat 访问不同的路由。然后,您可以测试每个路由是否返回符合您期望的 XML。
这是一篇描述如何在 RSpec 中测试 XML 输出的博客文章: 测试 XML 输出
Webrat是一个无头浏览器,这仅仅意味着您可以模拟一个浏览器,而无需在您的开发机器上打开像 FireFox 这样的真实浏览器。这意味着您可以在定义的步骤中简单地键入“访问'users/'”之类的内容并模拟用户访问您的应用程序。
最后,关于 RSpec 的 Pragmatic 书籍(仍处于测试阶段)是一个很好的资源,它介绍了如何一起使用 Cucumber、Webrat 和 RSpec 并使用 BDD 推动您的应用程序开发。
我试图这样做并且陷入了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
将其模块化以便更清洁的测试语料库,这是为了演示我发现的概念。