Как мне получить view_context в моих спецификациях контроллера для тестирования сериализаторов активных моделей

Я устанавливаю этот UserSerializer

class UserSerializer < ActiveModel::Serializer
  attributes :id, :first_name, :last_name, :email, :abilities

  delegate :current_user, to: :scope
  delegate :current_client, to: :scope

  def abilities
    object.client_roles.where(client_id: current_client.id)
  end
end

и это из моего ApplicationController

class ApplicationController < ActionController::Base   
  serialization_scope :view_context

  protected 
  def current_client
      ....

Я вставил код «делегата» на основе этой рельсовой трансляции около 7:45.

Затем он говорит, что недостатком является то, что тесты теперь нуждаются в view_context, и предлагает решение для использования Test Unit.

Когда я запускаю свои спецификации, я получаю одну из двух ошибок

Сбой/ошибка: get "show", :id => user.id, :format => :json      NoMethodError:        undefined method `current_client' для #‹#:0x00000004f69f60>

or

Сбой/ошибка: data.active_model_serializer.new(data, {:root => name}).to_json RuntimeError: UserSerializer#current_client делегирован в scope.current_client, но область действия равна нулю:

Как указать view_context в спецификациях моего контроллера?

Спасибо.


person philt5252    schedule 11.10.2013    source источник


Ответы (1)


OK. Моя вина. Позже я вызывал UserSerializer вручную в своем коде, чтобы делать утверждения. Вот что выдавало ошибку. Исправил это, просто добавив:

before(:each) do
  UserSerializer.any_instance.stub(:scope => controller)
end
person philt5252    schedule 13.10.2013
comment
Где именно вы это добавили? - person Mexxer; 13.05.2014