2013-09-26 10 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 

सभी चश्मा ठीक चलाने के लिए, लेकिन जब मैं चलाने सभी एक साथ मुझे चेतावनी मिलती है:

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 

पहली पंक्ति लगातार लापता हुक ट्रिगर किया जाएगा: आप पहले से लोड किसी भी वर्ग के बिना इस कोड है, तो "ठीक है, UsersController मौजूद नहीं है, तो चलो इसे लोड करने के लिए कोशिश करते हैं"।

लेकिन फिर, दूसरी पंक्ति तक पहुंचने पर, उपयोगकर्ता नियंत्रक वास्तव में पहले से ही शीर्ष स्तर पर परिभाषित किया गया है। तो, कोई const_missing हुक ट्रिगर नहीं किया गया है, और ऐप ज्ञात निरंतर उपयोग करने का प्रयास करेगा।

कि बचने के लिए, स्पष्ट रूप से अपने कल्पना फ़ाइलों के शीर्ष पर उचित वर्गों की आवश्यकता होती है:

#spec/controllers/users_controller_spec.rb: 

require 'users_controller' 

और

#spec/controllers/admin/users_controller_spec.rb 

require 'admin/users_controller' 
+0

यह काम करता है। प्रतिभाशाली! +1 –

संबंधित मुद्दे