2013-09-26 12 views
7

私は次のセットアップがありますRSpecのコントローラ

class UsersController < ApplicationController 
... 
end 

class Admin::BaseController < ApplicationController 
... 
end 

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

、同様に仕様を:

#spec/controllers/users_controller_spec.rb: 

describe UsersController do 
... 
end 

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

independantly実行したときに、私が実行したときにすべての仕様はしかし、細かい実行一緒に私は警告が表示されます:

toplevel constant UsersController referenced by Admin::UsersController 

管理コントローラの仕様は合格しません。

ルートファイル:

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

を...

レール4、RSpecの2.14

は、私は別の名前空間のコントローラに同じ名前を使用することはできませんか?

答えて

23

これは、トップレベルのクラスが名前空間を使用する前に自動読み込みを行う場合に発生します。

UsersController 
module AdminArea 
    UsersController 
end 

最初の行は、一定の不足しているフックをトリガーします:あなたがプリロード任意のクラスせずに、このコードがある場合は、「OK、がUserControllerは存在しないが、それでは、それをロードしてみましょう」。

しかし、2番目の行に達すると、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 –

関連する問題