Ruby on rails 如何从Rails集成测试访问会话?
考虑以下集成测试:Ruby on rails 如何从Rails集成测试访问会话?,ruby-on-rails,ruby-on-rails-3,unit-testing,session,integration-testing,Ruby On Rails,Ruby On Rails 3,Unit Testing,Session,Integration Testing,考虑以下集成测试: test "if there is no user in session, redirect to index and flash message" do open_session do |sess| post '/login', :email => users(:client).email, :password => 'rumpelstiltskin' sess[:user] = nil get '/user_page' as
test "if there is no user in session, redirect to index and flash message" do
open_session do |sess|
post '/login', :email => users(:client).email, :password => 'rumpelstiltskin'
sess[:user] = nil
get '/user_page'
assert_redirected_to index_path
assert_equal "Your session has expired. Please log in again", flash[:notice]
end
end
这将生成错误:未定义的方法“[]=”
并且,更改为sess.session[:user]=nil也会生成一个错误:NoMethodError:nil:NilClass的未定义方法“session”
如何从Rails中的集成测试修改会话参数
使用Rails 3.0.7、Ruby 1.9.2p180、单元测试框架
编辑:
get'/user\u page',nil,{:user=>nil}
和get('/user\u page',nil,{:user=>nil})
生成错误。只需使用会话[:user]
而不使用打开会话这似乎是不可能的。在Rails 3.2.3中,以下内容似乎对我有效:
# Hit the root_path to start our session
get root_path
# A helper method to set our session
login_as(@user_fixture)
# Now we can access the session variable
assert session[:user_id]
不确定这是否对你有用,祝你好运 这不是集成测试的设计目的。您不应该直接修改会话,而应该点击/logout路径。会话[:user]=nil
不会将更新的会话传递给控制器。这在rails 2中有效,但在rails 3(问题中使用的版本)中无效。这是单元测试还是集成测试?:)是的,但问题是关于访问会话
@BorisStitnicky-是的,我说不要访问会话,这是错误的。这是我两年前写的,但我认为我仍然坚持它。