ruby on rails - How to stub a method on a model copy in rspec? -
say have next code:
class foo < activerecord::base def self.bar all.each(&:bar) end def bar # want stub in test end end
now want create test (rspec):
foo = foo.create expect(foo).to receive(:bar) foo.bar
this test not pass because foo.bar
calls other instance of same model foo
.
i wrote complex code in such situations before, like:
expect_any_instance_of(foo).to receive(:bar)
but not good, because there no confidence foo
receives message (there several instances). , expect_any_instance_of
not recommended rspec maintainers.
how test such code, best practice?
if want fine grained control on each instance, can this:
foo_1 = foo.create expect(foo_1).to receive(:bar).and_return(1) foo_2 = foo.create expect(foo_2).to receive(:bar).and_return(2) # makes our specific instances of foo_1 , foo_2 returned. allow(foo).to receive(:all).and_return([foo_1, foo_2]) expect(foo.bar).to eq [1, 2]
Comments
Post a Comment