我有以下複雜的方法。我試圖找到並實施可能的改進。現在我把最後一條語句移到Access
類。如何用Rspec重構Rails模型中的複雜方法?
def add_access(access)
if access.instance_of?(Access)
up = UserAccess.find(:first, :conditions => ['user_id = ? AND access_id = ?', self.id, access.id])
if !up && company
users = company.users.map{|u| u.id unless u.blank?}.compact
num_p = UserAccess.count(:conditions => ['user_id IN (?) AND access_id = ?', users, access.id])
if num_p < access.limit
UserAccess.create(:user => self, :access => access)
else
return "You have exceeded the maximum number of alotted permissions"
end
end
end
end
我想在重構之前添加規格。我添加了第一個。應該怎樣看起來像別人?
describe "#add_permission" do
before do
@permission = create(:permission)
@user = create(:user)
end
it "allow create UserPermission" do
expect {
@user.add_permission(@permission)
}.to change {
UserPermission.count
}.by(1)
end
end
這種方法很複雜,因爲您的模型關係很複雜。這些模型是什麼以及它們爲什麼/如何相互作用? – pje