Rspec中获取用户id
@ · Monday, Nov 11, 2013 · 1 minute read · Update at Nov 11, 2013

场景

User(用户)跟某个Model是has_many一对多关联关系,这种情况在项目(尤其是互联网项目)中非常见。通常这种关联在Model中有一列user_id。一个用户不能更新、删除user_id不是他自己id的这个Model的实例。对于这种情况,rspec中如何来测试呢?

简单来说,可以在rspec先通过session来获取user_id。 下面以devise为例,

实现

首先,创建一个login_user宏,可以在rspec中登陆一个用户

spec/support/controller_macros.rb

module ControllerMacros
  def login_user
    before :each do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      user = FactoryGirl.create(:user)
      sign_in user
    end
  end
end     

其次,在controller中登陆用户,这时就可以从session中获得user_id

spec/controller/albums_controller_spec.rb

login_user
before(:each) do
  @album_owner_by_current_user = FactoryGirl.create(:album, user_id: session["warden.user.user.key"][0][0])
end

最后,你可以根据你的需要来编写相应测试。

Social Links