2014-12-08 3 views
3

Я использую Pundit камень для авторизации на моей закрытой системе Ruby, Rails по применению (с помощью Rails 4.1.5 и RSpec 3.0)Как создать спецификацию, которая проверяет, что Pundit отклоняет пользователей, которые не вошли в систему?

Я настроил свою политику приложений, чтобы вызвать исключение, когда пользователь не определен как это рекомендовано в документации пандита:

class ApplicationPolicy 
    attr_reader :user, :record 

    def initialize(user, record) 
    raise Pundit::NotAuthorizedError, "must be logged in" unless user 
    @user = user 
    @record = record 
    end 
end 

Как я могу написать спецификацию, которая проверяет, что каждая политика пандита отвергает нулевую пользователь?

Я сделал следующую попытку:

RSpec.describe PostPolicy do 
    it "should raise an exception when users aren't logged in" do 
    expect(AccountFolderPolicy.new(nil, record)).to raise_error(Pundit::NotAuthorizedError) 
    end 
end 

Но это ошибки с

Failure/Error: expect(PostPolicy.new(nil, record)).to raise_error(Pundit::NotAuthorizedError) 
Pundit::NotAuthorizedError: 
    must be logged in 

Любые предложения о том, как правильно проверить это?

+2

[ожидая ошибок должны работать с лямбда или блока 'ожидать {...} .to raise_error' ] (https://github.com/rspec/rspec-expectations#expecting-errors) вместо 'ожидать (...) .to raise_error()' –

ответ

5

RSpec не может поймать ошибку в фоновом режиме, если только вы use the raise_error matcher with the block form of expect:

RSpec.describe PostPolicy do 
    it "should raise an exception when users aren't logged in" do 
    expect do 
     AccountFolderPolicy.new(nil, record) 
    end.to raise_error(Pundit::NotAuthorizedError) 
    end 
end 

Альтернативно

RSpec.describe PostPolicy do 
    it "should raise an exception when users aren't logged in" do 
    expect { AccountFolderPolicy.new(nil, record) }.to raise_error(Pundit::NotAuthorizedError) 
    end 
end 
+1

как я говорю в комментарии. +1 для вас. –

+0

Прошу прощения, даже не заметил вашего комментария! –