2013-08-27 2 views
2

Я создал собственный камень для управления записями под названием «record_search», который включает в себя контроллер под названием «ApiController». В одном приложении мне нужно было подключить авторизационное поведение, чтобы предотвратить данные из будучи общедоступным, поэтому я добавил модуль ActiveSupport :: Concern, чтобы приложение могло добавить файл before_filter. Как я могу правильно проверить этот файл before_filter? (С помощью RSpec)Проблемы с контрольным контроллером (в Rails 3.2)

В Gem:

приложение/контроллеры/api_controller.rb

module RecordSearch 
    class ApiController < ApplicationController 
    respond_to :json 

    def search 
     render json: #app-specific code 
    end 

    def find 
     render json: #app-specific code 
    end 

    include Extensions #define any authorization logic here 
    end 
end 

Локальное приложение:

приложение/контроллеры/проблемы/record_search/extensions.rb

module RecordSearch::Extensions 
    extend ActiveSupport::Concern 
    include ApplicationHelper #defines current_user method 

    included do 
    before_filter :require_premium_user, :only => [:find,:search] 
    end 

    private 

    def require_premium_user 
    unless current_user 
     return render :json => {"error" => "not authorized"} 
    end 
    end 
end 

ответ

0

Предполагая controller является регулятором тока при испытании, то вы могли бы использовать:

describe "searching when not a premimum user" do 
    let(:user) { ... } # code to create a regular user 
    before { ... } # code to login user 
    it "should return an error message" do 
     expect(controller).to receive(:render).with({"error" => "not authorized"}) 
     # code to trigger find or search 
    end 
end 

с сопоставимыми примерами для пользователя премиум. См. Также http://apidock.com/rails/ActionController/Assertions/ResponseAssertions/assert_response, хотя я не знаком с использованием утверждений Rails.

Как в стороне, фактический код require_premium_user для меня не имел смысла.