如何在Ruby中存根使用method_missing定义的方法?

3
假设我有一些正确结构化的元代码,如下所示:

假设我有一些正确结构化的元代码,如下所示:

class Administrator < ParseInterface
  attr_accessor :args, :new_student
  include GeneralHelper

  def initialize args = {}
    @args = args
    @new_student = build_student
  end

end

class ParseInterface
  PARSE_METHOD_PREFIX = /\A(parse_){1}/

  def self.method_missing method_name, args = nil
    parse_method?(method_name) ? call_parse(method_name, args) : super
  end

  def self.parse_method? method_name
    method_name.to_s.match(PARSE_METHOD_PREFIX) ? true : false
  end

  def self.to_parse method_name
    (remove_parse_prefix(method_name)).camelize(:lower)
  end

  def self.remove_parse_prefix method_name
    method_name.to_s.gsub(PARSE_METHOD_PREFIX, "")
  end

  def self.call_parse method_name, args
    set_session_token args
    begin
      Parse::Cloud::Function.new(to_parse(method_name)).call(args)
    rescue Exception => e
      NewRelic::Agent.agent.error_collector.notice_error(e)
    end
  end

end

我可以调用类似Administrator.parse_do_stuff的内容,然后解析接口类会注意到前缀parse,随后调用解析api。我希望能够存根一些这些动态生成的方法,特别是,我希望能够...
allow(Administrator).to receive(:parse_rooms_for_user).and_return([{objectId: @room.parse_pointer }])

但是rspec抛出了一个未实现的错误。我看过一篇非常好的博客文章http://blog.enriquez.me/2010/2/21/dont-forget-about-respond-to-when-implementing-method-missing/,似乎接近解决这个问题,但我对解决方案不清楚。因此,在Ruby中如何存根动态生成的类方法?感谢,JD
1个回答

3

这种情况正是 respond_to_missing? 被添加以支持的原因。 - Jörg W Mittag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接