水豚/ Rspec控制器测试与has_secure_password
问题描述:
我试图测试我的控制器使用水豚。我尝试了很多方法,但出于某种原因,我无法看到current_user会话。我知道登录工作时,我运行我的规范。我也在我的控制器测试之前访问登录页面。但是,当:logged_in函数被击中时,它似乎总是将我重定向。水豚/ Rspec控制器测试与has_secure_password
所以不知道我错过了什么?
这里是我..
session_controller
def create
user = User.find_by_username(params[:username])
if(user && user.authenticate(params[:password]))
user.update_attribute(:token, User.token_digest)
flash[:notice] = "Success"
session[:user_id] = user.id
session[:token] = user.token
redirect_to dashboard_index_path
else
flash[:notice] = "Failed"
flash.now.alert = "Invalid user name or password"
render "new"
end
end
application_controller
protect_from_forgery
before_filter :logged_in
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
def logged_in
if !current_user
redirect_to root_url
return
end
if session[:token] != current_user.token
redirect_to root_url
end
end
products_controller_spec
it 'Should display new product form' do
user_login
visit new_product_path
response.body.should have_content("<h1>Create New Product</h1>")
end
spec_helper.rb
def user_login
visit root_path #this is new_session
fill_in "username", :with => "admin"
fill_in "password", :with => "111111"
click_button "Login"
end
答
那么我得到它的工作,不确定其政治正确的方式,但.. ..而不是访问页面,我只是设置会话。在spec_helper.rb中。
def user_login
user = FactoryGirl.create(:user)
session[:user_id] = user.id
session[:token] = User.token_digest
end