Вот мой очень простой класс способность:Mock способность класса
class Ability
include CanCan::Ability
def initialize(user)
if user.has_role? :admin
can :manage, :control_panel
end
end
end
Как я должен дразнить его в контроллер спецификации?
Вот мой управления контроллер панели:
class Admin::ControlPanelController < ApplicationController
authorize_resource class: false
rescue_from CanCan::AccessDenied do |exception|
redirect_to root_url, danger: "#{exception}"
end
def statistics
end
end
Вот мой control_panel контроллер спецификации:
describe '#statistics:' do
let(:request){ get :statistics }
context 'When guest;' do
before do
# HOW SHOULD I MOCK HERE?
end
describe 'response' do
subject { response }
its(:status){ should eq 302 }
its(:content_type){ should eq 'text/html' }
it{ should redirect_to root_path }
end
describe 'flash' do
specify { expect(flash[:danger]).to eq "You do not have sufficient priviledges to access the admin area. Try logging in with an account that has admin priviledges." }
end
end
Как я должен издеваться способность? Раньше я делал это:
let(:user){ FactoryGirl.create :user }
expect(controller).to receive(:current_user).and_return user
expect(user).to receive(:has_role?).with(:admin).and_return false
, но это было до того я использовал канкан и вручную проверить, что пользователь имел определенную роль. Такое поведение происходило в контроллере приложений, поэтому было очень легко насмехаться. Я с трудом издевательского этого класса способности :(
Я хочу, чтобы дразнить его в различных контекстах я чувствую себя немного потеряли, потому что даже если я делаю это:.
expect(Ability).to receive(:asdasdadskjadawd?).at_least(:once)
не поднимаются нет ошибок, хотя один поднимается, если я заклинание «Способность» неправильно, так что это насмешливое класс ок ...