btakita/rr

Spy verifies receipt of an attr assignment call

Opened this issue · 2 comments

describe 'Spy' do
  subject { stub!.subject }
  describe "with an attr_writer" do
    before { stub(subject).attribute=(anything) }
    context "after setting the attr" do
      before { subject.attribute = :value }
      it("verifies receipt of the call") { should have_received.attribute=(:value) }
      it("verifies receipt of the call via method_missing hack") { should have_received.method_missing(:attribute=, :value) }
    end
  end
end

Unless you run the test, I'm not sure if the problem is obvious. Essentially

should have_recieved.attribute(:value)

works but

should have_recieved.attribute=(:value)

doesn't work.

It looks like RR::SpyVerificationProxy.method_missing isn't returning the new RR::SpyVerification. This looks like a ruby issue as a = b = 1 will set a to 1 and not the result of b= (hope that makes sense).
I don't think this is something that can be fixed in a simple patch and may require something more drastic like a new api for spies.

In the mean-time you could manually verify with something like

RR::SpyVerification.new(subject, :attribute=, :value).call

I can confirm this is still an issue.