我正在嘗試使用rspec,factory_girl & capybara編寫集成測試。我也安裝了黃瓜,但我沒有使用它(據我所知)。使用Rspec和水豚在Rails 3中測試會話
我基本上想要用我的用戶預先填充數據庫,然後進入我的主頁並嘗試登錄。它應該重定向到user_path(@user)。
但是,會話似乎不會在我的/ rspec/requests/integration測試中持久化。
我的規格:/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來獲取用戶的密碼。這是您應用中的安全漏洞。您是否使用純文本存儲密碼? – 2011-03-08 18:20:06
這沒有關係,它可能不是安全漏洞。對#password的調用只會返回一個密碼,因爲它是由Factory在實例變量中設置的。這很可能是他正在使用Devise或類似的東西,它不會以明文形式將密碼屬性保存到數據庫中,因此如果該實例變量消失,它就不可用。 – 2011-03-16 20:27:46