Rspec:自定义匹配器:想要一个与现有匹配器相反的行为的匹配器

时间:2015-09-16 09:43:45

标签: ruby-on-rails rspec cancan

我有一个情况

let(:user) { create(:user, organization: org, role_ids: [Role::ROLE_CSA]) }
subject(:ability) { Ability.new(user) }
describe 'Not Permitted' do

  # I need this
  it { is_expected_not_to (be_able_to(:index, AdminsController)) }

  # Or this
  it { is_expected_to (not_be_able_to(:index, AdminsController)) }
end

很遗憾,我发现is_expected_not_tonot_be_able_to无效。

我可以这样做

  it 'should not permit' do
    expect(ability).not_to be_able_to(:index, AdminsController)
  end

但如果可能,我想使用short form代替。有什么方法可以实现我想要的吗?

如果没有,我想创建新的custom matcher,如果可能的话,其行为与be_able_toCanCan的{​​{1}}相反。任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

来自:https://www.relishapp.com/rspec/rspec-core/docs/subject/one-liner-syntax

你应该可以这样做:

it { is_expected.not_to (be_able_to(:index, AdminsController)) }