Ruby on rails Rspec-Mock模型方法

Ruby on rails Rspec-Mock模型方法,ruby-on-rails,rspec,Ruby On Rails,Rspec,我有以下方法, Model/Summary.rb def show_summary device_lastest_reading = lastest_reading end Model/Reading.rb def lastest_reading select_readings(start_date, last_date) end def lastest_reading { :a=>13, :b=>"7666",

我有以下方法,

Model/Summary.rb

def show_summary
    device_lastest_reading = lastest_reading
  end
Model/Reading.rb

def lastest_reading
    select_readings(start_date, last_date)
  end
def lastest_reading
    {
      :a=>13,
      :b=>"7666",
      :c=>6729690,
    }
  end
last_reading
方法从硬件获取值。我已经为RSPEC创建了一个
DummyReading.rb
,并将
lastest_reading
方法放置如下

DummyReading.rb

def lastest_reading
    select_readings(start_date, last_date)
  end
def lastest_reading
    {
      :a=>13,
      :b=>"7666",
      :c=>6729690,
    }
  end
这是我试过的

it "should return summary data" do
        allow(DummyReading.lastest_reading).to receive(Model.show_summary).and_return({})
      end
我收到一个错误“
undefined method
到{}:Hash`的{sym'”

在rspec中,如何模拟/存根此设备\u最新\u读取变量


谢谢。

正如@max提到的,在提问之前,你应该做适当的家庭作业。首先了解模拟和存根之间的区别,以及它是如何使用的

要快速获得帮助,以下方法应该有效

it "should return summary data" do
  allow_any_instance_of(Reading).to receive(:latest_reading).and_return(DummyReading.new.latest_reading)
end

但是,不建议使用的任何实例。结帐。

我不明白您认为这段代码会如何运行。您在reading中定义了
最新的\u reading
,但是您在摘要中调用它,就好像它是该类的实例方法一样。您可以通过编写实际类作为最小的可运行示例来澄清这一点吗?为什么文件扩展名是
.cs
而不是
rb
?您也不需要仅为测试创建单独的类。改用模拟协作者。@max在show_summary方法中执行RSPEC时,我需要从DummyReading.rb->lastest_读取方法而不是Model/reading.rb->lastest_读取方法中获取值。我可以用他们的方法来做这件事吗?你能按要求编辑这个问题吗?这样代码就可以理解/运行了吗?重复同样的问题没有帮助。我不是傻瓜。我想告诉你的是,
Model.show\u summary
将给出一个无方法错误,因为它是一个实例而不是类方法。即使它这样做了,它也会在最后一次读取时出错,因为该方法是在一个完全不同的类中定义的。如果你连面向对象编程的基本知识都不懂,那么模仿其实是无关紧要的。