场景
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
最后,你可以根据你的需要来编写相应测试。