Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从Rails集成测试访问会话?_Ruby On Rails_Ruby On Rails 3_Unit Testing_Session_Integration Testing - Fatal编程技术网

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-是的,我说不要访问会话,这是错误的。这是我两年前写的,但我认为我仍然坚持它。