ruby-on-rails - 如何从 Rails 集成测试访问 session ?

标签 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'
    assert_redirected_to index_path
    assert_equal "Your session has expired. Please log in again", flash[:notice]
  end    
end

这会产生错误:undefined method '[]='
并且,更改为 sess.session[:user] = nil也会产生错误:NoMethodError: undefined method 'session' for nil:NilClass
您如何从 Rails 的集成测试中修改 session 参数?

在 Rails 3.0.7、Ruby 1.9.2p180、单元测试框架中工作。

编辑:get '/user_page', nil, {:user => nil}get ('/user_page', nil, {:user => nil} )产生错误。

最佳答案

在 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]

不确定这是否适合你,祝你好运!

关于ruby-on-rails - 如何从 Rails 集成测试访问 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156559/

相关文章:

java - 期望的结果部分错误 : Jmockit/Junit

ruby-on-rails - 在 Controller 中渲染 View 后出现 nil 的 NoMethodError

ruby-on-rails - 我的 application.js 无法工作并且 application.css 无法在 Rails 中更新

javascript - 成功的 AJAX 请求破坏了 jQuery 函数

ruby-on-rails-3 - Bootstrap Assets 应该只在管理员中工作 - Rails

javascript - 如何动态添加国家标记?

javascript - 在 Angular 单元测试指令中注入(inject)过滤器

java - Spring MVC 测试配置

javascript - 在脚本标签中访问 Angular 变量

ruby-on-rails - Windows 上的 "rails"命令