Ruby rspec模拟一个具有哈希属性的类

时间:2017-10-28 00:06:58

标签: ruby unit-testing hash rspec

我有一个我正在测试的课程,称之为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)以防万一。同样的错误。 想法?

1 个答案:

答案 0 :(得分:1)

感谢Max的帮助。这是正确答案......

some_hash_obj[project_name] = some_obj
expect(yourbar_obj).to receive(:projects).and_return(some_hash_obj)

两个关键部分。 :在项目之前,some_hash_obj必须是哈希。我试图一次性在哈希索引处返回值(这是一个obj),但这不是它的工作原理。返回哈希值,[]将适用于它。