Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

[#22563] CircularReferenceError calling #to_json on a mocha-ified object

#19

Date: 2008-10-26 19:09 Opener: James Mead

Bill Kocik reports:-


def do_something
 @something = Something.find(:first)
 @something.do_whatever
 render :json => @something.to_json
end

A test might be this:


context "when do_something is called" do
 setup do
   @something = Something.new()
   Something.expects(:find).returns(@something)
   @something.stubs(:do_whatever)
   get :do_something
 end
 should_respond_with :success
end

Because I stubbed a method on my @something object (and this also happens with expects()), I get this:


1) Error:
test: when do_something is called should respond with success. (SomethingControllerTest):
ActiveSupport::JSON::CircularReferenceError: object references itself

If I print out the object @something, I see that it contains an @mocha attribute that references the containing object, which is the cause of to_json's heartburn and the error. But that @mocha attribute is not present if I never call stubs() or expects() on the object that's going to be converted to JSON, and I do not get the error in that case. Can anyone show me what I'm doing wrong, or is this actually a known issue?

James Mead comments:-

It sounds like this is a bug and will be an issue with any object on which #stubs or #expects has been called. Depending on how #to_json is implemented it ought to be possible to fix it.

Reported by James Mead · January 1st, 2009 @ 07:49 PM

State: invalid
Milestone: none
Assigned to: nobody

Activity

  1. James Mead
    James Mead
    • State changed from new to invalid

    I can't reproduce this bug. I've run your test as Test::Unit tests with Rails 2.2, Mocha 0.9.4 and Ruby 1.8.6. The test passes.

    I'm marking this ticket as "invalid". If this is still causing you a problem, please give us some more details e.g. Rails version, RSpec version, Ruby version.

    Thanks, James.

    January 26th, 2009 @ 05:23 PM

Please Sign in or create a free account to add a new ticket.

With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.