Testing Custom RSpec Authorization Matchers in CanCan
This test suite validates the custom RSpec matcher ‘be_able_to’ in the CanCan authorization library. It ensures proper delegation of permission checks and verifies accurate error message generation for authorization failures. The tests confirm the integration between CanCan’s permission system and RSpec’s expectation syntax.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
ryanb/cancan
spec/cancan/matchers_spec.rb
require "spec_helper"
describe "be_able_to" do
it "delegates to can?" do
object = Object.new
mock(object).can?(:read, 123) { true }
object.should be_able_to(:read, 123)
end
it "reports a nice failure message for should" do
object = Object.new
mock(object).can?(:read, 123) { false }
expect do
object.should be_able_to(:read, 123)
end.should raise_error('expected to be able to :read 123')
end
it "reports a nice failure message for should not" do
object = Object.new
mock(object).can?(:read, 123) { true }
expect do
object.should_not be_able_to(:read, 123)
end.should raise_error('expected not to be able to :read 123')
end
it "delegates additional arguments to can? and reports in failure message" do
object = Object.new
mock(object).can?(:read, 123, 456) { false }
expect do
object.should be_able_to(:read, 123, 456)
end.should raise_error('expected to be able to :read 123 456')
end
end