मैं अपने नियंत्रक का परीक्षण करने और चिंताओं को अलग करने की कोशिश कर रहा हूं।रेल में आरएसपीसी: पहले_फिल्टर को कैसे छोड़ें?
पहली चिंता यह है कि "कौन सी कार्रवाई निष्पादित करने में सक्षम है?"
मैं प्रमाणीकरण के लिए प्रमाणीकरण के लिए be9's acl9 का उपयोग कर रहा हूं। लेकिन इससे कोई फर्क नहीं पड़ता, मेरी सभी प्राधिकरण चिंताओं को before_filter
में संभाला जाता है। मैं परीक्षण कर रहा हूँ इस तरह के एक before_filter
यह करने के लिए कुछ इसी तरह से:
describe SomeModelsController, "GET to index (authorization)" do
before(:each) do
@siteadmin = mock_model(User)
@siteadmin.stub!(:has_role?).with("siteadmin", nil).and_return(true)
end
it "should grant access to a siteadmin" do
controller.should_receive(:current_user).at_least(:once).and_return(@siteadmin)
get :index
response.should be_success
end
end
यह कल्पना ठीक काम कर रहा है!
अब, दूसरी चिंता यह है कि "क्या कार्रवाई करता है जो इसे करना है?"
इसमें प्राधिकरण की जांच शामिल नहीं है। सबसे अच्छा/साफ समाधान लंघन किया जाएगा कि before_filter
सब एक साथ और बस की तरह कुछ कार्य करें: चिंता करने की जो भूमिका के साथ जो उपयोगकर्ता के बारे में पहले लॉग इन करने के लिए किया गया है होने के बिना
describe SomeModelsController, "GET to index (functional)" do
it "should find all Models" do
Model.should_receive(:find).with(:all)
end
end
। अभी मैं इसे इस तरह हल:
describe SomeModelsController, "GET to index (functional)" do
before(:each) do
@siteadmin = mock_model(User)
@siteadmin.stub!(:has_role?).with("siteadmin", nil).and_return(true)
controller.stub!(:current_user).and_return(@siteadmin)
end
it "should find all Models" do
Model.should_receive(:find).with(:all)
end
end
मैं अब फैसला किया है कि मेरी siteadmin अब और सूचकांक कार्रवाई का उपयोग करने का अधिकार नहीं है, यह केवल एक कल्पना नहीं तोड़ चाहते हैं - अर्थात् कल्पना में तोड़ने के लिए किया गया है कि ऐसा मामला - लेकिन पूरी तरह से असंबंधित दूसरे spec भी।
मुझे पता है कि यह मूल रूप से एक मामूली मुद्दा है, लेकिन यह अच्छा होगा अगर कोई एक (सुरुचिपूर्ण) समाधान के साथ आ सकता है!
धन्यवाद, इस बारे में नहीं सोचा था। यदि पहले_फिल्टर को छोड़ने का कोई तरीका नहीं है, तो यह सबसे अच्छा समाधान हो सकता है। – sebastiangeiger
ठीक है, मैंने अपना जवाब अपडेट किया। उम्मीद है कि आपको वही चाहिए जो आपको चाहिए। – Baldu
अच्छा, फिल्टर काम से पहले छोड़ना अच्छा है। केवल नकारात्मक पक्ष यह है कि एसीएल 9 प्रति नाम एक नामहीन लैम्ब्डा फ़िल्टर स्थापित करता है, इसलिए मुझे पहले नामांकित नाम के निर्माण को मजबूर करना पड़ता है। – sebastiangeiger