3

我设置了这个 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 左右输入了基于此 railscast的“委托”代码

然后他继续说缺点是测试现在需要一个 view_context 并提供使用测试单元的解决方案。

当我运行我的规范时,我得到了两个错误之一

失败/错误:获取“show”,:id => user.id,:format => :json NoMethodError:#<#:0x00000004f69f60> 的未定义方法`current_client'

或者

失败/错误:data.active_model_serializer.new(data, {:root => name}).to_json RuntimeError: UserSerializer#current_client 委托给 scope.current_client,但范围为零:

如何在我的控制器规格中提供 view_context?

谢谢。

4

1 回答 1

3

好的。我的错。后来我在我的代码中手动调用它UserSerializer来做断言。这就是引发错误的原因。只需添加以下内容即可修复它:

before(:each) do
  UserSerializer.any_instance.stub(:scope => controller)
end
于 2013-10-13T19:05:19.230 回答