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.
Dbe274443625e4ed258a390ff9c25d24?d=identicon&s=25 Ricky Barnaby (rickybby)
on 2009-03-18 04: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?
F0befb20d021fc1f6ce30df5a12d36a3?d=identicon&s=25 Jay Bo (booyau)
on 2009-03-18 19:10
Ricky Barnaby 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!
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-18 19:40
(Received via mailing list)
On Mar 18, 3:48 am, Ricky Barnaby <rails-mailing-l...@andreas-s.net>
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.