Вопрос для начинающих по Rails для RSpec с CanCan - PullRequest
1 голос
/ 27 августа 2011

Я сейчас использую cancan с rspec.

Пожалуйста, взгляните на мои способности.rb

require 'spec_helper'
require "cancan/matchers"

class Ability

  include CanCan::Ability

  def initialize(user)
    if user       # Only logged in users
      if user.role? :admin
        can :manage, :all

      elsif user.role? :producer
        can :read, Business
        can :update, Business do |b|
          b.user_id == user.id
        end
        can :redeem, Purchase 

      elsif user.role? :consumer
        can :your, Deal
        can [:create, :redirect_to_wepay], Purchase
        can :show, Purchase do |purchase|
          purchase.user_id == user.id
        end
      end

      # Good thing about devise with Cancan is that it takes care of this.
      can :manage, User do |the_user|
        the_user.id == user.id
      end

    else
      # This is needed for the cans that follows
      user = User.new

    end

    # Everyone's session
    can :read, Deal
    can :read, Business

    # You have to enable it for wepay
    can [:sold_out, :callback, :received], Purchase

  end
end

В моей спецификации / models /ability_spec.rb у меня есть

describe Ability do 

  describe "consumers" do
    describe "cancan" do 
      before(:each) do
        @user = Factory(:user, :role => "consumer")
        @ability = Ability.new(@user)
      end

      describe "success" do 
        #**This line I am getting ability is nil
        @ability.should == 5

        #**This line gives me be_able_to undefined
        #@ability.should_not be_able_to(:read, Factory(:deal))

        #@ability.can(:read, Factory(:business)).should be_true
      end

Есть идеи, почему я получаю @ability как ноль?

Кроме того, я хочу добавить некоторые действия моего контроллера, связанные с контролем разрешений, в этот файл able_spec.rb. Это возможно? (Я явно хочу добиться этого, потому что мое приложение имеет 3 роли пользователей, и я обнаруживаю, что я засоряю свои файлы спецификаций контроллеров со всеми этими разрешениями, связанными с одним вкладышем.

Спасибо!

1 Ответ

0 голосов
/ 27 августа 2011

Тесты должны появляться в блоках it или specify. describe и context просто для группировки.

describe "success" do 
  #**This line I am getting ability is nil
  @ability.should == 5
end

Должно быть больше похоже на:

it "allows consumers to do blah blah blah" do 
  @ability.should == 5
end
...