with tutorial tests test run rails how ruby-on-rails ruby ruby-on-rails-3 rspec cancan

ruby on rails - tutorial - ¿Cómo pruebo correctamente las habilidades de CanCan con RSpec?



rspec with rails (1)

Estoy probando las habilidades de CanCan por primera vez y estoy perplejo. Me falta algo ... incluso si devuelvo falso / verdadero dentro de la lata: invite_to block Aún no obtengo las especificaciones para pasar. ¿Me estoy perdiendo de los emparejadores de CanCan? o talones? o definiendo habilidades en CanCan?

¿Algo que me falta?

habilidad.rb

class Ability include CanCan::Ability def initialize(user) user ||= User.new can :invite_to, Network do |network| network.allows_invitations? && (user.admin? || user.can_send_invitations_for?(network)) end end end

ability_spec.rb

require ''cancan'' require ''cancan/matchers'' require_relative ''../../app/models/ability.rb'' class Network; end; describe Ability do let(:ability) { Ability.new(@user) } describe "#invite_to, Network" do context "when network level invitations are enabled" do let(:network) { stub(allows_invitations?: true) } it "allows an admin" do @user = stub(admin?: true) ability.should be_able_to(:invite_to, network) end it "allows a member if the member''s invitation privileges are enabled" do @user = stub(admin?: false, can_send_invitations_for?: true) ability.should be_able_to(:invite_to, network) end it "denies a member if the member''s invitation privileges are disabled" do @user = stub(admin?: false, can_send_invitations_for?: false) ability.should_not be_able_to(:invite_to, network) end end end end

Fallas

1) Ability#invite_to, Network when network level invitations are enabled allows an admin Failure/Error: ability.should be_able_to(:invite_to, network) expected to be able to :invite_to #<RSpec::Mocks::Mock:0x3fe3ed90444c @name=nil> # ./spec/models/ability_spec.rb:16:in `block (4 levels) in <top (required)>'' 2) Ability#invite_to, Network when network level invitations are enabled allows a member if the member''s invitation privileges are enabled Failure/Error: ability.should be_able_to(:invite_to, network) expected to be able to :invite_to #<RSpec::Mocks::Mock:0x3fe3edc27408 @name=nil> # ./spec/models/ability_spec.rb:21:in `block (4 levels) in <top (required)>''


let(:network) do n = Network.new n.stub!(:allows_invitations? => true) n end

Si ejecuta el código tal como lo escribió, nunca se alcanzará el código dentro del bloque Can. Su llamada a stub devuelve un objeto de la clase RSpec :: Mocks :: Mock; debe ser una red de clase para que CanCan pueda aplicar la regla.