【问题标题】:Devise Functional Testing - no session data设计功能测试 - 没有会话数据
【发布时间】:2012-08-18 17:27:44
【问题描述】:

在将设计安装到我的应用程序后,我正试图让我的功能测试再次运行。该应用程序仍然可以完美运行,但由于某种原因,在我使用“sign_in @user”后,数据在会话中,但在我尝试“get :index”之类的操作后,设计(看守)会话数据不再存在

test "should get index" do
  @user = FactoryGirl.create(:user)
  session[:session_id] = 4
  session['warden.user.user.key'] = sign_in @user
  puts session
  get :index
  puts session
  assert_response :success
  assert_not_nil assigns(:departments)
end 

我手动设置了会话 ID 和“warden.user.user.key”,但 session_id 在第二个 puts 会话中存在,而不是“warden.user.user.key”。无论我是否调用“sign_in @user”,它总是会重定向并显示“您需要登录或注册才能继续”提示

编辑 - 我正在使用带有 mm-devise 的设计(因为我使用的是 MongoDB 和 Mongomapper)

感谢您的帮助 - 原来是没有清除数据库的问题。创建用户的方式并没有相互覆盖,但是哪个用户将被登录是模棱两可的。

【问题讨论】:

    标签: ruby-on-rails-3 devise functional-testing


    【解决方案1】:

    在第一次 puts 会话中“warden.user.user.key”的值显示什么?

    【讨论】:

    • {"warden.user.user.key"=>["User",[BSON::ObjectId('5031292354cf7f01c9000003')], "$2a$04$DHoE0bKefIExtmwWKRNYkO"]},这是在开发模式下运行时与会话数据的格式相同
    【解决方案2】:

    当我使用 Cucumber 时,我认为你应该像我在这里做的那样:

    # This gives you the login_as(@user) method when request object is not present
    include Warden::Test::Helpers
    Warden.test_mode!
    After { Warden.test_reset! }
    
    Given /^I am an authenticated user$/ do
      @current_user = FactoryGirl.create(:user)
      login_as(@current_user, :scope => :user)
    end
    

    ...并清理您的用户工厂以删除您可能拥有的任何凭据。

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多