Forum: Ruby on Rails Issues with database/object caching and testing

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ricky B. (Guest)
on 2009-03-18 05:48
Hi all,

I just burned two hours of development time trying to debug this issue.
Can someone please tell me if there is a way to disable database caching
when running unit tests or another way to avoid running into this type
of problem??

This does not work:
    assert periods(:period1).ongoing? # Asserts true
    plays(:end_of_first_half).process # Ends the period
    assert !periods(:period1).ongoing? # Asserts false

This DOES work:
    assert periods(:period1).ongoing? # Asserts true
    plays(:end_of_first_half).process # Ends the period
    assert !Period.find(periods(:period1).id).ongoing? # Asserts true

I've only just now run into this issue after dozens of tests. Am I
missing something obvious about expected behavior?
Jay B. (Guest)
on 2009-03-18 20:10
Ricky B. wrote:
> Hi all,
>
> I just burned two hours of development time trying to debug this issue.
> Can someone please tell me if there is a way to disable database caching
> when running unit tests or another way to avoid running into this type
> of problem??
>
> This does not work:
>     assert periods(:period1).ongoing? # Asserts true
>     plays(:end_of_first_half).process # Ends the period
>     assert !periods(:period1).ongoing? # Asserts false
>
> This DOES work:
>     assert periods(:period1).ongoing? # Asserts true
>     plays(:end_of_first_half).process # Ends the period
>     assert !Period.find(periods(:period1).id).ongoing? # Asserts true
>
> I've only just now run into this issue after dozens of tests. Am I
> missing something obvious about expected behavior?

I have run into this same problem, but don't understand it either. To be
safe, I always do a find on the object first, but wish I had a more
reliable solution to this as well.

I too have wasted lots of debugging time only to find it was just an
issue with my test code!
Frederick C. (Guest)
on 2009-03-18 20:40
(Received via mailing list)
On Mar 18, 3:48 am, Ricky B. <removed_email_address@domain.invalid>
wrote:
>     assert !periods(:period1).ongoing? # Asserts false
>
> This DOES work:
>     assert periods(:period1).ongoing? # Asserts true
>     plays(:end_of_first_half).process # Ends the period
>     assert !Period.find(periods(:period1).id).ongoing? # Asserts true
>

I don't know exactly what this code is doing, but activerecord does
cache associations and so on (and fixtures are only loaded once per
test when you do periods(:period1). There's no easy way to disable
this, periods(:period1).reload.ongoing? is a little less ugly than
other alternatives.

Fred
This topic is locked and can not be replied to.