完善一个RSpec宏控制器

我试图生成一个简单的宏为Rails应用程序,使用设计进行验证。 基本上我想确保当用户访问一个页面,需要验证,他们重定向到登录页面。 因此,像这样:

it_requires_authentication_for :index, :new, :create, :update

这里所期望的结果应该是显而易见的。 然而,我的问题是,我想不出来映射每个行动,其相应的HTTP方法的最佳方法(:获取,张贴等...)

我开始了这一点:

def it_should_require_authentication_for(*actions) actions.each do |action| it "should require authentication for #{action}" do get action.to_sym response.should redirect_to( new_user_session_path ) end end end

这当然只是做的get。 谁能告诉我,我怎么可能会提供这个宏的所有动作? 我假设我需要以某种适当的特定方法测试,如果行动路线,而我只是真的不知道。

任何帮助是极大的赞赏。

--------------解决方案-------------

也许老了,但还是可以帮助一些。

这里是一个很好的和简单的方法来定义RSpec的宏(甚至是控制器)。

http://osmose.6spot.com.br/2011/02/better-macros-with-rspec/

你看,使用方法缺少你能够记录特定的行为到您录制的宏,例如,这是一个支架控制器规范与特定的存根指令:

描述CustomersController做

前(:每个)办
mock_filter(:require_user_owner)
结束

#GET /客户
得到:指数做
默认:存根=>:关闭

前(:每个)办
Customer.stub(:find_all_by_user_id){[mock_customer]}
结束
结束

#GET /客户/ 6
得到:显示,:ID => 6

#GET /客户/新
拿到新

#GET /客户/ 6 /编辑
得到:编辑:ID => 6

#POST /客户
帖子:创建

#PUT /客户/ 6
放:更新:ID => 6

#删除/客户/ 6
删除:销毁:ID => 6

结束

我使用,直到我拿出东西更优雅如下:

# controller_macros.rb
def it_should_recognize_and_generate_routes_for(controller, routes)
describe "routing" do
routes.each do |route|
action = route[:action].to_s
method = route[:method] || :get
url = controller + (route[:url] || '')
params = route.reject {|k, v| [:action, :method, :url].include?(k) }
expected = { :controller => controller, :action => action }.merge(params)

it "should recognize and generate '#{action}'" do
{ method => url }.should route_to(expected)
end
end
end
end

# posts_controller_spec.rb
describe Forum::PostsController do
it_should_recognize_and_generate_routes_for('forum/posts', [
{ :action => :new, :url => '/new' },
{ :action => :create, :method => :post },
{ :action => :show, :url => '/1', :id => '1' },
{ :action => :index },
{ :action => :edit, :url => '/1/edit', :id => '1' },
{ :action => :update, :method => :put, :url => '/1', :id => '1' },
{ :action => :destroy, :method => :delete, :url => '/1', :id => '1' }
])
end

顺便说一句我还是要扩展它与像路线的工作:

get 'login' => 'user_sessions#new'

这Railscast涉及你正在寻找什么:http://railscasts.com/episodes/157-rspec-matchers-macros

它看起来像你可以调用get方法,将控制器的规格您所需的操作,它会调用控制器的适当方法。

这里是我的版本的宏:

# Last argument is an optional hash of http arguments
# which is useful when working with nested models
#
# ex it_should_require_login_for_actions(:index,:new,:create, {:parent_id=>1})
#
def it_should_require_login_for_actions(*actions)
request_args = {:id => 1}

#If the last element of the actions list is a hash, then merge it
# with the existing request arguments
if actions[-1].is_a?(Hash)
request_args.merge!(actions.pop())
end

actions.each do |action|
it "#{action} action should require login" do
get action, request_args
response.should redirect_to(login_url)
end
end
end

分类: 时间:2012-01-01 人气:1
分享到:

相关文章

  • 当学习Ruby on Rails的,我应该只关注学习导轨或学习相关技术与它一起? 2012-01-21

    我打算花时间来真正了解Ruby on Rails的深入(我以前做过一些很轻微的涉猎与它),所以我希望能重塑自己作为一个Rails开发. 我碰到虽然问题是,有一些在Rails社区目前使用的相关技术的公平一点,我不知道我是否应该学习整个事情,或专注于学习的Rails的默认值,然后再拓展到了更多的东西. 例如: 模板. 我看了看Haml的 ,它看起来真的很酷(应该不难学其一). 测试. 我想学的现在,而测试驱动开发,但是在Rails的土地"下一件大事",似乎与RSpec的行为驱动开发 使用J

  • 提高Ruby on Rails的性能Windows 7 2012-08-17

    我追求的Ruby on Rails开发,但使用的窗口进行耙和轨道的任务是十分缓慢的,但我听说它是​​在Linux上恰恰相反. 我使用的是上网本(宏碁Aspire One 722),用于开发和使用VirtualBox运行Ubuntu是出了问题. 在做整个双启动的事情也不是一个选项,因为我碰到,我真的没有充裕的时间,现在解决严重的处理器负载均衡和取暖问题. 我想知道的是:有什么执行这些耙和Rails在Windows 7任务时,我可以安装或者我可以更改任何设置会给我的linux般的速度? 我听说的Cy

  • 一个RESTful POST的Ruby on Rails的功能测试 2012-12-20

    我想写一个RESTful Web服务我工作在一个Ruby on Rails的应用程序的功能测试. 该测试是一个POST请求,其中请求的主体是一个普通的XML文档,而不是形式. 对任何指针如何做到这一点? 我现在遇到的问题是如何在调用POST方法指定身体XML. --------------解决方案------------- 以下为我工作: @request.env['RAW_POST_DATA'] = MY_XML_STRING post :create 你可能能够通过将做到这一点@reques

  • 造型设计问题(Ruby on Rails的) 2013-01-26

    我转换一个PHP项目为Ruby on Rails的. 以前的项目中使用MySQL作为数据库和Rails项目将这样做. 在项目中有一个"步骤",这一过程可以有许多的一个概念. 的步具有1 5种. (测验,视频Text..etc)显然数据的每个步骤所需的类型是不同的. 在此之前建模的方法是存储在同一表中的所有步骤,并有一个保存步骤的序列化的PHP对象的字段. 我觉得这是不好的一对夫妇的理由......你可以'真正对查询序列化的数据,它使数据添加或更改对象的结构很辛苦. 难道更有意义,这个数

  • Ruby on Rails的3:HABTM协会不更新加入表 2014-02-10

    我是新来的Ruby on Rails和我拼命试图得到一个HABTM协会工作. 我有一个客户数据库中,每个客户可以有多次接触. 从客户的"秀"的看法,我想有一个链接添加新联系人到选定的客户. 到目前为止,我有以下数据: 车型/ customer.rb: class Customer < ActiveRecord::Base has_and_belongs_to_many :contacts accepts_nested_attributes_for :contacts, :allo

  • ASP.NET MVC的Ruby on Rails的开发者? 2014-07-15

    很长一段时间潜伏者,第一次的海报. 我是一个自学成才的黑客有学问的Ruby on Rails启动. 在工作​​中,我被允许工作在一个Web应用程序 - 唯一的缺点是我不得不使用ASP.NET. 这种技术选择的任务,就像我宁愿使用Rails的. 有几十个"Rails使用.NET / PHP / Java开发"的书和博客,但我还没有发现任何打算向相反的方向,从滑轨到.NET. 可能有人请给我了一个典型的Rails应用程序将转化过来的ASP.NET MVC的概况? 我研究了IDE,C#/ V

  • Ruby on Rails的,PHP或C ++语言的网络社交网络 2012-01-01

    我选择了在大学文凭的工作. 这是一个小型的社交网络. 但现在我很坚持用哪种技术,我应该坚持下去. 我平均在C ++ ISAPI Web服务开发,低于平均水平PHP(有几个项目,吧)和新来的Ruby和框架轨. 我有一个最后期限1.5个月开发它(我的全职工作后,每天约5小时). 此外,我听说它很容易学习和使用Ruby on Rails的开发. 考虑到C ++,我知道,我有我自己做大量的编码和工作和PHP看起来几乎是一样的我. 所以,我在找你熟练的开发人员劝你会在我的位置吗? 学习回报率,坚持用C +

  • 这样做(的iGoogle /飞鸽/ Netvibes的)类应用程序中使用Ruby on Rails框架 2012-01-01

    任何人有一个框架的任何建议,以帮助我建立iGoogle /飞鸽/像Netvibes的应用程序使用Ruby on Rails. 我试图用apotomo几天,但不能让它在所有的工作. 如果无法让使用Ruby on Rails,做ü有使用什么有什么建议? 谢谢, --------------解决方案------------- 现在,再试试吧! 这对您: 如何在Rails的仪表板与Apotomo 对于的iGoogle型门户网站,你可能要检查的ExtJS. 下面是一个示例 http://www.extjs

  • 从URL中读取数据,并与Ruby on Rails的流回客户端 2012-01-01

    我还是新的Ruby和Rails所以请原谅我的问题,如果答案是显而易见的. 我有一个控制器称为运行的应用bucket其中,当通过一个id连接到一个不可路由的子网(10.0.0.xx),返回数据假设某些条件得到满足. 我目前使用的send_data的方法bucket控制器,但由于这需要一个本地文件我读的URL的内容转换成字符串,然后返回了. 这是一个非常小的文件不够好,但对于大型的二进制文件是太慢了. 我真的希望能够做的就是流的数据回用/桶作为代理. 下面是我目前使用的控制器的代码: fileNam

  • Ruby on Rails和DB:灯具:负载 - 它可以忽略某些型号? 2012-01-01

    我在使用两个数据库的Ruby on Rails应用; 一个是数据库应用程序,而第二个是在其滑轨没有给出控制一个独立的数据库. 问题是装载装置进入开发的时候,它会尝试运行从连接到开发数据库,​​这显然出现了错误删除的表的语句在独立的数据库. 我不想Rails的尝试做任何事情,但读了独立的数据库 - 我特别不想它试图删除表. 有一个简单的方法来告诉Rails忽略的车型为第二个数据库装入灯具时? 更新:为了澄清,滑轨似乎觉得从独立数据库中的表是开发连接的一部分,虽然我已经指定使用的模型类的正确连接es

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.356 (s). 10 q(s)