gpt4 book ai didi

ruby-on-rails - 我如何测试 before_filter 是否会针对所有 Rails Controller 操作进行重定向?

转载 作者:行者123 更新时间:2023-11-28 19:53:50 25 4
gpt4 key购买 nike

我的一个 Controller 中有一个相当典型的 require_no_user 作为 before_filter。我需要测试登录用户在尝试访问 Controller 的任何操作时是否会被此过滤器重定向。

有没有一种明智的方法可以在不枚举我的测试用例中的所有 Controller 操作的情况下执行此操作?

我正在努力避免:

context 'An authenticated user' do
setup do
activate_authlogic
@user = Factory(:user)
UserSession.create(@user)
do

should 'not be allowed to GET :new' do
get :new
assert_redirected_to(root_path)
end

should 'not be allowed to POST :create' do
# same as above
end

# Repeat for every controller action
end

最佳答案

据我所知...虽然您可以通过将所有方法和操作打包到散列中使其更短一些:

should "be redirected" do
{
:get => :new,
:post => :create,
}.each do |method, action|
send(method, action)
assert_redirected_to(root_path)
end
end

编辑:是的,这可能有点矫枉过正,但这是另一种方式:

should "be redirected" do
ActionController::Routing::Routes.named_routes.routes.each do |name, route|
if route.requirements[:controller] == @controller.controller_name
send(route.conditions[:method], route.requirements[:action])
assert_redirected_to(root_path)
end
end
end

似乎如果你在自定义路由中定义多个 :methods 它仍然只会“找到”第一个,例如

map.resources :foo, :collection => {
:bar => [:get, :post]
}

以上路由只会尝试使用 GET 动词。

此外,如果 URL 中有其他要求,例如存在记录 ID,我的天真示例将忽略该要求。我把它留给你来破解 :)

关于ruby-on-rails - 我如何测试 before_filter 是否会针对所有 Rails Controller 操作进行重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com