【发布时间】:2026-02-10 07:55:02
【问题描述】:
您好,我的应用中没有任何前端。我愿意只发布一个可供不同客户端使用的 RESTful API。任何指示我应该如何继续用黄瓜测试它?控制器中的每个操作仅生成 XML 提要。有什么指点或建议吗?
【问题讨论】:
标签: ruby-on-rails rest cucumber integration-testing
您好,我的应用中没有任何前端。我愿意只发布一个可供不同客户端使用的 RESTful API。任何指示我应该如何继续用黄瓜测试它?控制器中的每个操作仅生成 XML 提要。有什么指点或建议吗?
【问题讨论】:
标签: ruby-on-rails rest cucumber integration-testing
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 输出: Testing XML output
Webrat 是一个无头浏览器,这仅仅意味着您可以模拟一个浏览器,而无需在您的开发机器上打开像 FireFox 这样的真实浏览器。这意味着您可以在定义的步骤中简单地键入“访问'users/'”之类的内容并模拟用户访问您的应用程序。
最后,Pragmatic book on RSpec(仍处于测试阶段)是关于如何结合使用 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
将其模块化以便更清晰的测试语料库,这是为了演示我发现的概念。
【讨论】: