# setup method in functional tests and instance variables

**URL:** <https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275>\
**Category:** rubyonrails-talk\
**Created:** [April 6, 2009, 1:36pm UTC](https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275 "2009-04-06T13:36:51Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![11175](https://avatars.discourse-cdn.com/v4/letter/1/8edcca/32.png) [@11175](https://discuss.rubyonrails.org/u/11175)\
**Post date:** [April 6, 2009, 1:36pm UTC](https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275/1 "2009-04-06T13:36:51Z")

</div>

I have the following in my functional test file.

class UserControllerTest \< ActionController::TestCase fixtures :users

&nbsp;&nbsp;def setup &nbsp;&nbsp;&nbsp;&nbsp;@controller = UserController.new &nbsp;&nbsp;@request = ActionController::TestRequest.new &nbsp;&nbsp;@response = ActionController::TestResponse.new &nbsp;&nbsp;@invalid\_user = user(:invalid\_user) &nbsp;&nbsp;@valid\_user = users(:valid\_user) &nbsp;&nbsp;end

def test\_login\_success &nbsp;&nbsp;@valid\_user.screen\_name end

When I run a test that tries to use the @valid\_user variable I get the following error.

NoMethodError: You have a nil object when you didn't expect it! The error occurred while evaluating nil.screen\_name

It seems that this class isn't storing the instance variables in memory.

Any ideas.

Thanks in advance

Mitch

---

<div class="post-metadata">

**Author:** ![David\_Knorr1](https://avatars.discourse-cdn.com/v4/letter/d/a88e4f/32.png) [@David\_Knorr1](https://discuss.rubyonrails.org/u/David_Knorr1)\
**Post date:** [April 6, 2009, 2:06pm UTC](https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275/2 "2009-04-06T14:06:35Z")

</div>

The above should work just fine, given that you have a user fixture named 'valid\_user'. Do you see something like this in test/fixtures/ users.yaml?

valid\_user: &nbsp;&nbsp;screen\_name: xyz

---

<div class="post-metadata">

**Author:** ![11175](https://avatars.discourse-cdn.com/v4/letter/1/8edcca/32.png) [@11175](https://discuss.rubyonrails.org/u/11175)\
**Post date:** [April 6, 2009, 2:59pm UTC](https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275/3 "2009-04-06T14:59:24Z")

</div>

David Knorr wrote:

> > � @valid\_user = users(:valid\_user) The error occurred while evaluating nil.screen\_name
> > 
> > It seems that this class isn't storing the instance variables in memory.
> > 
> > Any ideas.
> 
> The above should work just fine, given that you have a user fixture named 'valid\_user'. Do you see something like this in test/fixtures/ users.yaml?
> 
> valid\_user: &nbsp;&nbsp;screen\_name: xyz
> 
> -- Best regards, David Knorr [http://twitter.com/rubyguy](http://twitter.com/rubyguy)

HI David

This is my yaml

valid\_user: &nbsp;&nbsp;&nbsp;id: 1 &nbsp;&nbsp;&nbsp;screen\_name: millikan &nbsp;&nbsp;&nbsp;email: ram@example.com &nbsp;&nbsp;&nbsp;password: electron

Now here is the weird thing.

if I do the following in the actual test method

def test\_login\_success @valid\_user = users(:valid\_user) &nbsp;&nbsp;@valid\_user.screen\_name end

it works just fine.

Its like I can't access instance variables that run in the setup. Why would that be?

For my units test I have a similar setup and it works no problem.

---

<div class="post-metadata">

**Author:** ![David\_Knorr1](https://avatars.discourse-cdn.com/v4/letter/d/a88e4f/32.png) [@David\_Knorr1](https://discuss.rubyonrails.org/u/David_Knorr1)\
**Post date:** [April 7, 2009, 3:36pm UTC](https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275/4 "2009-04-07T15:36:38Z")

</div>

What do mean when saying "fix this". Did you run the rails:update rake task?

---

<div class="post-metadata">

**Author:** ![11175](https://avatars.discourse-cdn.com/v4/letter/1/8edcca/32.png) [@11175](https://discuss.rubyonrails.org/u/11175)\
**Post date:** [April 8, 2009, 2:04am UTC](https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275/5 "2009-04-08T02:04:34Z")

</div>

David Knorr wrote:

> > ActiveSupport::TestCase
> > 
> > from
> > 
> > ActionController::TestCase
> > 
> > works like a charm.
> > 
> > Why don't they fix this?
> 
> What do mean when saying "fix this". Did you run the rails:update rake task?
> 
> -- Best regards, David Knorr. [http://twitter.com/rubyguy](http://twitter.com/rubyguy)

I did run rails:update rake. And I updated rails. But even now when I run script/generate controller someController I have to edit the test file so that it is changed from ActionController::Testcase to ActiveSupport::TestCase.

Should I update something else so I don't have to do this everytime? And it does this only for the functionals not the unit test skeletons.

Mitch

---

<div class="post-metadata">

**Author:** ![David\_Knorr1](https://avatars.discourse-cdn.com/v4/letter/d/a88e4f/32.png) [@David\_Knorr1](https://discuss.rubyonrails.org/u/David_Knorr1)\
**Post date:** [April 11, 2009, 9:24am UTC](https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275/6 "2009-04-11T09:24:41Z")

</div>

Did you upgrade to another version of Rails recently?

---

<div class="post-metadata">

**Author:** ![11175](https://avatars.discourse-cdn.com/v4/letter/1/8edcca/32.png) [@11175](https://discuss.rubyonrails.org/u/11175)\
**Post date:** [April 22, 2009, 4:48am UTC](https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275/7 "2009-04-22T04:48:35Z")

</div>

David Knorr wrote:

---

<div class="post-metadata">

**Author:** ![Milan\_Iliev](https://avatars.discourse-cdn.com/v4/letter/m/8edcca/32.png) [@Milan\_Iliev](https://discuss.rubyonrails.org/u/Milan_Iliev)\
**Post date:** [May 6, 2009, 5:10pm UTC](https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275/8 "2009-05-06T17:10:21Z")

</div>

Mitchell,

Sounds like you should maybe just bite the bullet and upgrade to 2.3.2 if that's being an issue.

When you say "If I move up to another version [of Rails], my application does not work", what do you mean? Can you provide specific errors?

Best, Milan

---

<div class="post-metadata">

**Author:** ![11175](https://avatars.discourse-cdn.com/v4/letter/1/8edcca/32.png) [@11175](https://discuss.rubyonrails.org/u/11175)\
**Post date:** [May 15, 2009, 9:20am UTC](https://discuss.rubyonrails.org/t/setup-method-in-functional-tests-and-instance-variables/41275/9 "2009-05-15T09:20:27Z")

</div>

Milan Iliev wrote:

> Mitchell,
> 
> Sounds like you should maybe just bite the bullet and upgrade to 2.3.2 if that's being an issue.
> 
> When you say "If I move up to another version [of Rails], my application does not work", what do you mean? Can you provide specific errors?
> 
> Best, Milan
> 
> On Apr 22, 12:48�am, Mitchell Gould \<rails-mailing-l...@andreas-s.net\>

Just a quick reply.

Two things:

1. How do I move my app to 2.3.2? Do I just change the configuration settings? 2. When I have done this in the past the application won't start up meaning the server won't launch.

Thanks for your reply

Mitch
