[rspec-users] Setting instance variables for controllers

Jonathan Linowes jonathan at parkerhill.com
Wed Sep 3 11:29:39 EDT 2008

On Sep 3, 2008, at 10:53 AM, Scott Taylor wrote:

> On Sep 3, 2008, at 10:40 AM, Maurício Linhares wrote:
>> You don't need to set the instance variable, you can stub the find  
>> call:
> Or you could also stub the call to User::find.
> Also - you don't *WANT* to set the instance variable - it's an  
> encapsulation violation - there is nothing in the public interface  
> about it.  Remember, these are not only specs, but *examples*.   
> Would you want someone writing production code modeled off of that  
> spec?
> Scott

Often I'll encapsulate important instance variables (especially ones  
assigned in before_filters) in a method, like current_user,  
current_project, etc.

     def current_project

Then these are easily stubbed in specs.


Further, I usually mock the entire before_filter methods

	before_filter :find_project

with a shared method like

def mock_find_project
   project = @project || mock_project

Lastly, I maintain the find_project method in application.rb so it  
can be shared among controllers, and tested separately. (either with  
shared behaviors, or in my case i've rigged up an  
application_controller_spec that lets me test methods in  
application.rb independent of a specific controller).


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

More information about the rspec-users mailing list