【发布时间】:2018-04-09 15:30:01
【问题描述】:
我有一个正在测试的类,叫它 myfoo。它访问一个名为 yourbar 的类。具体是这样的......
yourbar_obj.projects[project_name]
在我的规范代码中我有这个
let(:yourbar_obj) { Class.new }
我想模拟它以响应哈希属性访问。 所以我尝试了这个
expect(yourbar_obj).to receive(projects).and_return(some_obj)
但是当我运行代码时它说
NoMethodError: undefined method `projects' ...
是否可以像这样模拟哈希访问?相同类型的东西适用于常规方法调用。 我什至尝试添加一个 .with(project_name) 以防万一。同样的错误。 想法?
【问题讨论】:
-
使用
receive(:projects)- 您将方法名称作为符号传递。这与哈希无关,receive总是这样 -
with(project_name)在这里也没有意义。如果你想模拟[project_name]getter 调用,你可以使用expect(projects).to receive(:[]).with(project_name).and_return(whatever) -
哇。我怎么错过了。
-
好吧,它不喜欢 :projects... 在 [] 上有一个未定义的方法。所以我像这样添加了。
with(projects[])这让我的参数数量错误。 -
如果您可以显示您收到的“[] 上的未定义方法”以及您的确切尝试,那将是有用的,但无论如何,
with(projects[])是错误的,你为什么要把[]最后呢?
标签: ruby unit-testing hash rspec