0

我正在使用 Sorcery gem 进行用户注册/登录。

这个 gem 的一个特性是require_login你想要验证的任何控制器上的 before_filter。

他们登录后,我为我的应用程序创建了一个dashboard命名空间。例如/dashboard/reportsor/dashboard/employees等​​。

路由文件:

# Dashboard                                                
namespace :dashboard do                                      
  # Recent Activity                                          
  get '' => redirect('/dashboard/recent-activity')           
  get 'recent-activity' => 'activities#index', :as => 'root' 
  # Other dashboard controllers and actions
end  

我将 before_filter 提取到它自己的控制器中,称为:

“应用程序/控制器/仪表板/base_controller.rb”

class Dashboard::BaseController < ApplicationController

  before_filter :require_login

end

我想做的是在某种测试中 100% 确定我在仪表板文件夹(或仪表板命名空间)中创建的任何新控制器都继承自Dashboard::BaseController

例如我的活动控制器:

class Dashboard::ActivitiesController < Dashboard::BaseController

我不想在几个月内创建控制器并且不小心让它从 ApplicationController 继承,它仍然会但不会有登录功能。

我正在使用 RSpec

4

1 回答 1

1

不敢相信自己的眼睛,我自己解决了这个问题......

require 'spec_helper'

describe Dashboard::BaseController do

  it "is the superclass of every dashboard namespaced controller" do
    Rails.application.eager_load!
    ApplicationController.descendants.each do |controller|
      if controller.to_s.include?("Dashboard::") && controller.to_s != "Dashboard::BaseController"
        expect(controller.superclass.to_s).to eq("Dashboard::BaseController")      
      end
    end
  end

end    
于 2013-03-09T06:10:44.940 回答