Проблемы с контроллером тестирования (в Rails 3.2)

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

В драгоценном камне:

приложение/контроллеры/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

person clemcke    schedule 27.08.2013    source источник


Ответы (1)


Предполагая, что 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 не имел для меня смысла.

person Peter Alfvin    schedule 28.08.2013