【问题标题】:Mocking dynamic objects (constantize) rspec模拟动态对象(常量化)rspec
【发布时间】:2015-01-22 07:19:30
【问题描述】:

我正在使用 Rails 4.2、rspec 3 和 ruby​​ 2.1.2。

我要 stub/mock 动态对象,要测试的原始代码是:

self.property_a.action_class_name.constantize.new.perform(payload)

我如何模拟该表演的结果?

谢谢,

夏。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rspec mocking rspec3


    【解决方案1】:

    根据您想要实现的目标,有很多选择。这是一个:

    mock_class = Class.new do
      def perform(payload)
        :foo
      end
    end
    
    allow(<object>).to receive_message_chain(:property_a, :action_class_name, :constantize) { mock_class }
    

    【讨论】:

      【解决方案2】:

      感谢您的回答,

      但我用另一种方式解决了它:

      expect_any_instance_of(ModuleName::ClassName).to receive(:perform).and_return({a: 1})
      

      【讨论】:

      • 这是另一个问题的答案,可能是重复的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 2020-02-26
      相关资源
      最近更新 更多