我正在使用RSpec的存根功能来对对象进行where()
调用:
allow(ActiveRecordObject).to_receive(:where).and_return(result)
当预期结果很简单时,这很有用,例如ActiveRecordObject的实例,其字段设置为某个值。
但是,我想测试的结果更复杂。我打算在另一个通过Rails hasMany
功能深入嵌套的ActiveRecordObject上测试一个值集,这更加棘手。例如,我想......
expect(result[:child_object][:test_target][:field]).to eq(value)
...在我正在测试的函数被调用之后作为测试工作。
我尝试过的方式到目前为止未能实现这一目的的方法是复制对象的结构,使结果更加复杂。
我想要做的是将实际调用(或值,如果没有真正调用的话)存入test_target,这样在调用时会触发更简单的存根。在我看来这样做会更好,因为它会创建更少的易碎,易于理解的代码。
我还尝试在类TestTarget上存根where()
方法。
在RSpec中配置链接的ActiveRecord对象中的值的正确方法是什么,这样当调用父对象时,结果结构包含一个硬编码的值用于测试。
此外,如果不使用Factory Girl(工作中的技术主管决定我们不想使用FactoryGirl),这是否可行?