在前端较少的应用程序中使用Cucumber测试RESTful API

时间:2009-07-25 16:01:55

标签: ruby-on-rails rest cucumber integration-testing

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

5 个答案:

答案 0 :(得分:9)

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

When /^I restfully delete (?:|the )user "([^\"]*)"$/ do |login|
  visit(path_to("user \"#{login}\" page"), :delete)
end

答案 1 :(得分:7)

我认为Webrat不仅仅是你需要的东西。 对于XML Feed测试,您不需要像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对象并测试它们的属性等。这更清晰,恕我直言。

答案 2 :(得分:5)

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

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

答案 3 :(得分:2)

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

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

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

最后Pragmatic book on RSpec(仍处于测试阶段)是如何将Cucumber,Webrat和RSpec结合使用并通过BDD推动应用程序开发的重要资源。

答案 4 :(得分: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

模块化它以获得更清晰的测试语料库,这是为了演示我找到的概念。