针对Router进行测试

原文的作者,十分推崇极度简洁的Router描述,以期达到提高速度和简洁本身的目标。

例如,作者很建议将Rails自己默认的路由':controller/:action/:id'删除,原因是这会妨碍简洁的RESTful发挥。

然而,尝试总是有不理想的时候:

有次在使用如下的测试代码:
def test_logout_should_redirect_to_root_path
UserSession.create(User.first)

delete :destroy

assert_match /logged out/, flash[:notice]
assert_redirected_to root_path
end

对下面的路由
map.logout '/logout', 
:controller => 'user_sessions',
:action => 'destroy',
:method => 'delete'
测试的时候

结果就得到了如下的错误提示:

[quote]ActionController::RoutingError: No route matches {
:action=>"destroy",
:controller=>"user_sessions"}[/quote]

错误提示说,delete(或者还有get post)方法,找不到创建的路由。那么,作者首先想到的就是怎么绕过去呢,那么定义个新的路由应该可以了吧,代码如下:

with_routing do |set|
set.draw do |map|
map.resource :user_sessions, :only => [:destroy]
map.root :controller => 'foobars', :action => 'index'
end

delete :destroy

assert_match /logged out/, flash[:notice]
assert_redirected_to root_path
end


诚然,这样能解决问题,但是作者毕竟是有技术人的骨气的,不会这么容易就屈服的。于是,找到了一个比较好的解决办法

在test_helper.rb添加

class ActionController::TestCase
# add a catch-all route for the tests only.
ActionController::Routing::Routes.draw { |map| map.connect ':controller/:action/:id' }
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值