CanCan在RSpec Controller规范中

时间:2013-02-12 22:54:52

标签: ruby-on-rails rspec devise cancan

我花了大部分时间尝试根据控制器规范解决问题,而且当前的解决方法对我来说似乎是不可接受的。任何考虑为什么这工作? ......而我应该做些什么。

给定一个简单的层次结构,如下所示,以及以下ability.rb,properties_controller_spec.rb不允许下面的规范通过,而不是说:

ability = Ability.new(subject.current_user)

你能告诉我为什么会这样吗?

谢谢!

型号:

class Account < ActiveRecord::Base
  has_many :properties, :dependent => :nullify
end

class Property < ActiveRecord::Base
  belongs_to :account
end

class User < Refinery::Core::BaseModel #for RefineryCMS integration
  belongs_to :account
end

Ability.rb:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.has_role? :user
      can [:read, :create, :update, :destroy], Property, account_id: user.account_id
    else
      can [:show], Property
    end
  end
end

properties_contoller_spec.rb:

require 'spec_helper'

describe PropertiesController do
  def valid_attributes
  describe "Authenticated as Property user" do
    describe "PUT update" do
      describe "with invalid params" do
        it "re-renders the 'edit' template" do
          property = FactoryGirl.create(:property, account: property_user.account)
          # Trigger the behavior that occurs when invalid params are submitted
          Property.any_instance.stub(:save).and_return(false)
          ability = Ability.new(subject.current_user) # seriously?
          put :update, {:id => property.to_param, :property => {  }}, {}
          response.should render_template("edit")
        end
      end
    end
  end
end

0 个答案:

没有答案