मेरे नाम पर एक नियंत्रक स्पेस बनाने के दौरान एक अजीब समस्या है जब एक ही नाम के साथ एक वैश्विक नियंत्रक भी होता है।नेमस्पेस्ड कंट्रोलर पर रुपेक कंट्रोलर स्पेक उसी नाम के साथ वैश्विक नियंत्रक को पाता है
नियंत्रक नाम HomeController
और Backend::HomeController
हैं।
ध्यान दें कि मैं अभी तक नहीं बनाया है फ़ाइल app/controllers/backend/home_controller.rb
, केवल वैश्विक नियंत्रक मौजूद app/controllers/home_controller.rb
इसलिए मैं परीक्षण त्रुटियों के साथ विस्फोट करने की उम्मीद है, लेकिन ऐसा नहीं है। यह सभी हरे और खुश हो जाता है।
मेरे कल्पना करता है, तो मैं कुछ और करने के लिए अपने वैश्विक HomeController
में नाम बदलने के लिए, उदाहरण के लिए NotMyHomeController
इस
#spec/controllers/backend/home_controller_spec.rb
require 'rails_helper'
RSpec.describe Backend::HomeController, type: :controller do
before do
user = FactoryGirl.create(:user)
allow(controller).to receive(:authenticate_user!).and_return(true)
allow(controller).to receive(:current_user).and_return(user)
end
describe "GET #index" do
it "returns http success" do
get :index
expect(response).to have_http_status(:success)
end
end
end
तरह लग रहा है हालांकि परीक्षण त्रुटियों कह
Unable to autoload constant HomeController, expected app/controllers/home_controller.rb to define it
कौन सा मुझे उस पर शक करता है के साथ विफल Rspec.describe
फ़ंक्शन में "बैकएंड" भाग से रूपेक परेशान नहीं है।
क्या मैं कुछ गलत कर रहा हूं या क्या मुझे कुछ और महत्वपूर्ण हिस्सा याद आ रहा है? आईएमएचओ, यह कल्पना पास नहीं होनी चाहिए (Gandalf को पारदर्शी करने के लिए)।
मैं रेल 4.2.6 का उपयोग कर रहा हूँ, Rspec-रेल 3.4.2
अद्यतन
मैक्स के रूप में बताया, यह शायद नहीं Rspec मुद्दे पर रेल autoloading के साथ कुछ है, लेकिन इसके बजाय।
हालांकि मैं सिर्फ
Backend::HomeController
रेल कंसोल में टाइपिंग, लेकिन वहाँ मैं उम्मीद त्रुटि
NameError: uninitialized constant Backend::HomeController
और according to the Rails guide, दोनों कंसोल और टेस्ट स्वीट autoloads पाने की कोशिश की। हालांकि मुझे लगता है कि मैं यहां सही रास्ते पर हूं।
मैं मैं अनुमान लगा रहा हूं कि रेल ऑटोलोडर कुछ खराब कर रहा है - यह 'ऑब्जेक्ट.कॉन्स्ट_मसिंग' बंदरपैचिंग द्वारा काम करता है जो आमतौर पर 'नाम त्रुटि: अनियमित स्थिर बैकएंड :: होमकंट्रोलर' उठाता। आरएसपीसी के साथ यह बहुत कम है। – max
मेरे लिए इसे साफ़ करने के लिए धन्यवाद। क्या आपके पास Rails Autoloader की जांच करने के बारे में कोई सुझाव है? –
http://guides.rubyonrails.org/autoloading_and_reloading_constants.html – max