title: Rails Tests Not Found - Undefined local variable or method "response"
body: <p>I'm trying to follow Michael Hartl's <a href="http://ruby.railstutorial.org" rel="nofollow">Rails 3 tutorial</a> and I'm running into an error I can't find explained elsewhere. Under <a href="http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users#sec-requiring_signed_in_users" rel="nofollow">Section 9.2.1</a>, I'm getting an error when trying to run a test for non-signed-in users trying to update a profile page.</p>
  
  <pre><code>describe "submitting to the update action" do
    before { put user_path(user) }
    specify { response.should redirect_to(signin_path) }
  end
  </code></pre>
  
  <p>The error I'm getting is "undefined local variable or method 'response' for # (NameError)". This is a response to "bundle exec rspec spec/". When I comment out the offending line, all tests instantiate and pass. I've tried replacing "response" with things like "response.body" and "page" but neither seem to help. </p>
  
  <p>I'm not sure what the issue is because as I'm moving forward with the tutorial, similar blocks are passing without incident.</p>
  
  <p>Here's the full error text:</p>
  
  <pre><code>C:\Ruby193\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) C:\Ruby193\bin\rake spec
  Testing started at 7:39 PM ...
  C:/Ruby193/bin/ruby.exe -S rspec ./spec/models/user_spec.rb ./spec/requests/authentication_pages_spec.rb ./spec/requests/static_pages_spec.rb ./spec/requests/user_pages_spec.rb
  Rack::File headers parameter replaces cache_control after Rack 1.5.
  C:/Users/Jeff/Documents/rails_projects/sample_app/spec/requests/authentication_pages_spec.rb:60:in `block (5 levels) in &lt;top (required)&gt;': undefined local variable or method `response' for #&lt;Class:0x4894908&gt; (NameError)
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:244:in `module_eval'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:244:in `subclass'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:230:in `describe'
      from C:/Users/Jeff/Documents/rails_projects/sample_app/spec/requests/authentication_pages_spec.rb:58:in `block (4 levels) in &lt;top (required)&gt;'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:244:in `module_eval'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:244:in `subclass'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:230:in `describe'
      from C:/Users/Jeff/Documents/rails_projects/sample_app/spec/requests/authentication_pages_spec.rb:51:in `block (3 levels) in &lt;top (required)&gt;'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:244:in `module_eval'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:244:in `subclass'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:230:in `describe'
      from C:/Users/Jeff/Documents/rails_projects/sample_app/spec/requests/authentication_pages_spec.rb:48:in `block (2 levels) in &lt;top (required)&gt;'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:244:in `module_eval'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:244:in `subclass'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:230:in `describe'
      from C:/Users/Jeff/Documents/rails_projects/sample_app/spec/requests/authentication_pages_spec.rb:46:in `block in &lt;top (required)&gt;'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:244:in `module_eval'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:244:in `subclass'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:230:in `describe'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/dsl.rb:18:in `describe'
      from C:/Users/Jeff/Documents/rails_projects/sample_app/spec/requests/authentication_pages_spec.rb:3:in `&lt;top (required)&gt;'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:245:in `load'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:245:in `block in load'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:236:in `load_dependency'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:245:in `load'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/configuration.rb:789:in `block in load_spec_files'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/configuration.rb:789:in `each'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/configuration.rb:789:in `load_spec_files'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:22:in `run'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/runner.rb:80:in `run'
      from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/runner.rb:17:in `block in autorun'
  rake aborted!
  C:/Ruby193/bin/ruby.exe -S rspec ./spec/models/user_spec.rb ./spec/requests/authentication_pages_spec.rb ./spec/requests/static_pages_spec.rb ./spec/requests/user_pages_spec.rb failed
  -e:1:in `load'
  -e:1:in `&lt;main&gt;'
  Tasks: TOP =&gt; spec
  (See full trace by running task with --trace)
  
  Process finished with exit code 1
  Empty test suite.
  </code></pre>
  
  <p>I'm pretty sure it's not a typo somewhere but here's the offending file (authentication_pages_spec.rb). (have_title() is a method I found here for fixing an error because apparently have_selector('title',...) is no longer valid syntax.)</p>
  
  <pre><code>require 'spec_helper'
  
  describe "Authentication" do
  
    subject { page }
  
    describe "signin page" do
      before { visit signin_path }
  
      it {should have_selector('h1', text: 'Sign in') }
      it {should have_title('Sign in') }
    end
  
    describe "signin" do
      before { visit signin_path }
  
      describe "with invalid information" do
        before { click_button "Sign in" }
  
        it { should have_title('Sign in') }
        it { should have_selector('div.alert.alert-error', text: 'Invalid') }
  
        describe "after visiting another page" do
          before { click_link "Home" }
          it { should_not have_selector('div.alert.alert-error') }
        end
      end
  
      describe "with valid information" do
        let(:user) { FactoryGirl.create(:user) }
        before { sign_in user }
  
        it { should have_title(user.name) }
        it { should have_link('Profile', href: user_path(user)) }
        it { should have_link('Settings', href: edit_user_path(user)) }
        it { should have_link('Sign out', href: signout_path) }
        it { should_not have_link('Sign in', href: signin_path) }
  
        describe "followed by signout" do
          before { click_link "Sign out" }
          it { should have_link('Sign in') }
        end
      end
    end
  
    describe "authorization" do
  
      describe "for non-signed-in users" do
        let(:user) { FactoryGirl.create(:user) }
  
        describe "in the Users controller" do
  
          describe "visiting the edit page" do
            before { visit edit_user_path(user) }
            it { should have_title('Sign in') }
          end
  
          describe "submitting to the update action" do
            before { put user_path(user) }
            specify ( response.should redirect_to(signin_path) )
          end
  
          describe "as wrong user" do
            let(:user) { FactoryGirl.create(:user) }
            let(:wrong_user) { FactoryGirl.create(:user, email: "wrong@example.com") }
            before { sign_in user }
  
              describe "visiting Users#edit_page" do
                before { visit edit_user_path(wrong_user) }
                it { should_not have_title(full_title("Edit user")) }
              end
  
              describe "submitting a PUT request to the Users#update action" do
                before { put user_path(wrong_user) }
                specify { response.should redirect_to(root_path) }
              end
           end
        end
      end
    end
  end
  </code></pre>