如何在我的控制器规范中获取view_context以测试活动模型序列化程序

时间:2013-10-11 14:49:31

标签: ruby-on-rails ruby rspec active-model-serializers

我设置了这个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左右根据this railscast输入了“委托”代码

然后他接着说,缺点是测试现在需要一个view_context并给出一个使用测试单元的解决方案。

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

  

故障/错误:获得 “显示”,:ID =&GT; user.id,:格式=&GT; :JSON   NoMethodError:   未定义的方法`current_client”为#&LT;#:0x00000004f69f60&GT;

  

失败/错误:data.active_model_serializer.new(data,{:root =&gt;   名})。to_json        RuntimeError:          UserSerializer#current_client委托给scope.current_client,但作用域为nil:

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

感谢。

1 个答案:

答案 0 :(得分:3)

行。我的错。我稍后在我的代码中手动调用UserSerializer来做断言。这就是抛出错误的原因。通过添加:

来修复它
before(:each) do
  UserSerializer.any_instance.stub(:scope => controller)
end