[rspec-users] class variables different between spec and runtime?

37 views
Skip to first unread message

Peter Fitzgibbons

unread,
Dec 22, 2009, 10:14:28 AM12/22/09
to rspec-users
Hello Folks,

This gist http://gist.github.com/261791 has an example user.rb, user_spec.rb
At runtime, this snippet fails

u = User.find(123)
u.update_with_profile({...})
The error occurred while evaluating nil.select):
  app/models/user.rb:6:in `moderator_fields'
  app/models/user.rb:118:in `update_with_profile'

The spec passes all-green.

Could you tell me how this might be ?

Thanks,

Peter Fitzgibbons
(847) 687-7646
Email: peter.fi...@gmail.com
IM GTalk: peter.fitzgibbons
IM AOL: peter.fi...@gmail.com

David Chelimsky

unread,
Dec 22, 2009, 10:22:15 AM12/22/09
to rspec-users
On Tue, Dec 22, 2009 at 9:14 AM, Peter Fitzgibbons <peter.fi...@gmail.com> wrote:
Hello Folks,

This gist http://gist.github.com/261791 has an example user.rb, user_spec.rb
At runtime, this snippet fails

u = User.find(123)
u.update_with_profile({...})
The error occurred while evaluating nil.select):
  app/models/user.rb:6:in `moderator_fields'
  app/models/user.rb:118:in `update_with_profile'

The spec passes all-green.

Could you tell me how this might be ?

The user in the spec comes from new_with_profile(), which sets instance variables on the User class.

The user in the console comes from find(), and those ivars are not yet set.
 

Thanks,

Peter Fitzgibbons
(847) 687-7646
Email: peter.fi...@gmail.com
IM GTalk: peter.fitzgibbons
IM AOL: peter.fi...@gmail.com

_______________________________________________
rspec-users mailing list
rspec...@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

David Chelimsky

unread,
Dec 22, 2009, 10:24:33 AM12/22/09
to rspec-users
On Tue, Dec 22, 2009 at 9:22 AM, David Chelimsky <dchel...@gmail.com> wrote:


On Tue, Dec 22, 2009 at 9:14 AM, Peter Fitzgibbons <peter.fi...@gmail.com> wrote:
Hello Folks,

This gist http://gist.github.com/261791 has an example user.rb, user_spec.rb
At runtime, this snippet fails

u = User.find(123)
u.update_with_profile({...})
The error occurred while evaluating nil.select):
  app/models/user.rb:6:in `moderator_fields'
  app/models/user.rb:118:in `update_with_profile'

The spec passes all-green.

Could you tell me how this might be ?

The user in the spec comes from new_with_profile(), which sets instance variables on the User class.

The user in the console comes from find(), and those ivars are not yet set.

Also - @params in the User class (in the class methods) is not the same @params in the User instances (in update_with_profile).

HTH,
David

Rick DeNatale

unread,
Dec 22, 2009, 10:30:41 AM12/22/09
to rspec-users
On Tue, Dec 22, 2009 at 10:24 AM, David Chelimsky <dchel...@gmail.com> wrote:
>
>
> On Tue, Dec 22, 2009 at 9:22 AM, David Chelimsky <dchel...@gmail.com>
> wrote:
>>
>>
>> On Tue, Dec 22, 2009 at 9:14 AM, Peter Fitzgibbons
>> <peter.fi...@gmail.com> wrote:
>>>
>>> Hello Folks,
>>>
>>> This gist http://gist.github.com/261791 has an example user.rb,
>>> user_spec.rb
>>> At runtime, this snippet fails
>>>
>>> u = User.find(123)
>>> u.update_with_profile({...})
>>> The error occurred while evaluating nil.select):
>>>   app/models/user.rb:6:in `moderator_fields'
>>>   app/models/user.rb:118:in `update_with_profile'
>>>
>>> The spec passes all-green.
>>>
>>> Could you tell me how this might be ?
>>
>> The user in the spec comes from new_with_profile(), which sets instance
>> variables on the User class.
>> The user in the console comes from find(), and those ivars are not yet
>> set.
>
> Also - @params in the User class (in the class methods) is not the same
> @params in the User instances (in update_with_profile).
> HTH,
> David


Also counting on class variables to retain state in Rails is a recipe
for disaster.


--
Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Twitter: http://twitter.com/RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

David Chelimsky

unread,
Dec 22, 2009, 10:36:01 AM12/22/09
to rspec-users
On Tue, Dec 22, 2009 at 9:30 AM, Rick DeNatale <rick.d...@gmail.com> wrote:
Also counting on class variables to retain state in Rails is a recipe
for disaster.

Did you read that in rails recipes?

:-/

Peter Fitzgibbons

unread,
Dec 22, 2009, 1:51:45 PM12/22/09
to rspec-users
DOH!
Thanks David,

Happy Holidays!


Peter Fitzgibbons
(847) 687-7646
Email: peter.fi...@gmail.com
IM GTalk: peter.fitzgibbons
IM AOL: peter.fi...@gmail.com


Andrew Premdas

unread,
Dec 28, 2009, 12:18:13 AM12/28/09
to rspec-users
2009/12/22 Rick DeNatale <rick.d...@gmail.com>
Please explain why - thanks.

Andrew

Rick DeNatale

unread,
Dec 28, 2009, 8:24:58 AM12/28/09
to rspec-users
On Mon, Dec 28, 2009 at 12:18 AM, Andrew Premdas <apre...@gmail.com> wrote:
> 2009/12/22 Rick DeNatale <rick.d...@gmail.com>

> Please explain why - thanks.

Because, classes and class variables aren't guaranteed to be persistent.

In development mode, classes can get reloaded, which wipes out class
(and class instance) variables.

In most deployment scenarios requests from a single user might be
handled by different processes, each with it's own state.

State that needs to be around between requests needs to be somewhere
persistent like the DB, or the session.

Reply all
Reply to author
Forward
0 new messages