के साथ परीक्षण सत्र मैं rspec, factory_girl & capybara के साथ एकीकरण परीक्षण लिखने की कोशिश कर रहा हूं। मेरे पास ककड़ी भी स्थापित है, लेकिन मैं इसका उपयोग नहीं कर रहा हूं (मेरे ज्ञान के लिए)।रेलवे 3 में रुपयेपीई और कैपिबरा
मैं मूल रूप से अपने उपयोगकर्ता के साथ डीबी को पूर्ववत करना चाहता हूं, फिर मेरे होम पेज पर जाएं और लॉग इन करने का प्रयास करें। इसे user_path (@user) पर रीडायरेक्ट करना चाहिए।
हालांकि, सत्र मेरे/rspec/अनुरोध/एकीकरण परीक्षणों में जारी नहीं लगते हैं।
मेरे कल्पना: /rspec/requests/users_spec.rb
require 'spec_helper'
describe "User flow" do
before(:each) do
@user = Factory(:user)
end
it "should login user" do
visit("/index")
fill_in :email, :with => @user.email
fill_in :password, :with => @user.password
click_button "Login"
assert current_path == user_path(@user)
end
end
रिटर्न:
Failures:
1) User flow should login user
Failure/Error: assert current_path == user_path(@user)
<false> is not true.
# (eval):2:in `send'
# (eval):2:in `assert'
# ./spec/requests/users_spec.rb:16
इसके बजाय, यह मेरी please_login_path पर रीडायरेक्ट - जो अगर लॉगिन किसी भी कारण से विफल रहता है होना चाहिए (या यदि सत्र [: user_id] सेट नहीं है)।
यदि मैं session.inspect डालने का प्रयास करता हूं, तो यह शून्य ऑब्जेक्ट के रूप में विफल हो जाता है।
अगर मैं नियंत्रक परीक्षण (/rspec/controllers/sessions_spec.rb) में यह करने के लिए प्रयास करते हैं, मुझे कोई समस्या नहीं के साथ सत्र का उपयोग कर सकते हैं, और मैं कॉल कर सकते हैं सत्र [: user_id]
मुझे नहीं पता कि यह संबंधित है या नहीं, लेकिन आपको @ user.password टाइप करके उपयोगकर्ता का पासवर्ड प्राप्त करने में सक्षम नहीं होना चाहिए। यह आपके ऐप में एक सुरक्षा भेद्यता है। क्या आप सादा पाठ का उपयोग कर पासवर्ड संग्रहित कर रहे हैं? –
यह संबंधित नहीं है, और शायद यह एक सुरक्षा भेद्यता नहीं है। #password पर कॉल केवल एक पासवर्ड देता है क्योंकि यह फैक्टरी द्वारा आवृत्ति चर में सेट है। ऐसा लगता है कि वह डेविस या ऐसा कुछ भी उपयोग कर रहा है जो स्पष्ट पाठ में डीबी में पासवर्ड विशेषता को जारी नहीं रखता है, और इसलिए यह उपलब्ध नहीं होगा कि इंस्टेंस वैरिएबल दूर जाये। –