2013-09-26 84 views
7

命名空間,我有以下設置:Rspec的控制器和輸出具有相同名稱的

class UsersController < ApplicationController 
... 
end 

class Admin::BaseController < ApplicationController 
... 
end 

class Admin::UsersController < Admin::BaseController 
... 
end 

而同樣規格:independantly運行時

#spec/controllers/users_controller_spec.rb: 

describe UsersController do 
... 
end 

#spec/controllers/admin/users_controller_spec.rb 
describe Admin::UsersController do 
... 
end 

所有的規格運行良好,但是當我運行所有在一起我得到的警告:

toplevel constant UsersController referenced by Admin::UsersController 

而從管理員控制器的規格不通過。

routes文件:

... 
resources :users 
namespace "admin" do 
    resources :users 
end 

...

軌道4,Rspec的2.14

我不能使用在不同的命名空間的控制器相同的名稱?

回答

23

這發生在使用名稱空間之前頂級類自動加載時。如果你有這樣的代碼沒有任何預裝類:

UsersController 
module AdminArea 
    UsersController 
end 

第一行會觸發時時刻刻的牽掛鉤:「好了,UsersController不存在,所以讓我們嘗試加載它。」

但是,然後到達第二行,UsersController確實已經在頂層定義了。所以,沒有觸發const_missing鉤子,app會嘗試使用已知的常量。

爲了避免這種情況,需要明確在你的規範文件的頂部適當類:

#spec/controllers/users_controller_spec.rb: 

require 'users_controller' 

而且

#spec/controllers/admin/users_controller_spec.rb 

require 'admin/users_controller' 
+0

這工作。輝煌! +1 –

相關問題