【发布时间】:2020-03-23 08:27:05
【问题描述】:
我有以下方法,
模型/Summary.rb
def show_summary
device_lastest_reading = lastest_reading
end
模型/Reading.rb
def lastest_reading
select_readings(start_date, last_date)
end
lastest_reading 方法从硬件获取值。我为 RSPEC 创建了一个DummyReading.rb 并放置了lastest_reading 方法,如下所示,
DummyReading.rb
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 methodto_sym' for {}:Hash`”
在 rspec 中如何模拟/存根这个 device_lastest_reading 变量。
谢谢。
【问题讨论】:
-
我不明白你认为这段代码会如何运行。您在阅读中定义
latest_reading,但您在摘要中调用它,就好像它在该类的实例方法中一样。您能否通过将实际类编写为最小的 RUNNABLE 示例来澄清这一点?为什么文件扩展名是.cs而不是rb?你也不需要为你的测试创建一个单独的类。改用instance double 来模拟协作者。 -
@max 在 show_summary 方法中执行 RSPEC 期间,我需要从 DummyReading.rb -> lastest_reading 方法而不是 Model/Reading.rb -> lastest_reading 方法获取值。他们有什么办法我可以做到这一点。
-
您能否按要求编辑问题,使代码实际上可以理解/运行?再次重复同样的问题并没有帮助。我不傻。 stackoverflow.com/help/how-to-ask
-
我想告诉你的是
Model.show_summary会给出一个无方法错误,因为它是一个实例而不是类方法。即使这样做了,它也会在lastest_reading上出错,因为该方法是在完全不同的类中定义的。如果您甚至不了解 OOP 的基础知识,那么 Mocking 真的是无关紧要的。
标签: ruby-on-rails rspec