Setting current_user in system tests

社会主义新天地 提交于 2019-12-11 17:02:45

问题


I'm using system tests to verify that the following flow works as expected for a user:

  1. Sign up in a form
  2. Get signed in
  3. Visit account page
  4. Update account information

However, I'm getting an error after user creation:

Puma caught this error: Couldn't find User with 'id'=16 (ActiveRecord::RecordNotFound)
/Me/MyComputer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activerecord-5.1.4/lib/active_record/core.rb:189:in `find'
/Me/MyComputer/Documents/my_app/app/controllers/application_controller.rb:30:in `current_user'

The error is pointing to the code that sets current_user in application_controller:

def current_user
  if session[:user_id]
    @current_user ||= User.find(session[:user_id])
  end
end

Is my assumption correct that it's not possible to access session in tests? And if so - how can I then set current_user so I can test my scenario above? If not so - what could be causing the error?


回答1:


In a rails system test your application should be able to access the session, your test code however cannot. In your case I assume current_user is being called from the application code, not from test code. In that case the most common reason for DB weirdness is that your Puma instance is running in clustered mode (separate process) rather than the required single mode (same process just a different thread). Check the output of Puma when running tests and make sure it states "single mode" - If not you'll need to adjust the configuration of Puma in the test environment to use 0 processes and 1 or more threads (as needed for your testing)



来源:https://stackoverflow.com/questions/47604409/setting-current-user-in-system-tests

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!