2

I have such spec (spec/controllers/stats_controller_spec.rb) to test my controller:

require 'spec_helper'

describe StatsController do
  render_views

  before(:each){ @user = FactoryGirl.create( :user ) }

  describe "GET 'users_in_system'" do
    describe "for non-signed users" do
      it "should deny access" do
        get :users_in_system, :locale => :en
        #...
      end
    end
  end
end

When i run this spec i get such error:

1) StatsController GET 'users_in_system' for non-signed users should deny access
     Failure/Error: get :users_in_system, :locale => :en
     ActionView::Template::Error:
       undefined method `authenticate' for nil:NilClass
     # ./app/views/layouts/_navbar_template.html.haml:16:in `_app_views_layouts__navbar_template_html_haml__2938837959272005060_70149962955560'
     # ./app/views/layouts/application.html.haml:12:in `_app_views_layouts_application_html_haml__243298846079092947_70149956982200'
     # ./spec/controllers/stats_controller_spec.rb:12:in `block (4 levels) in <top (required)>'

I tried to solve this error by adding this line to (spec/spec_helper.rb):

#...

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
  #...
end

Then i started to get such error:

1) StatsController GET 'users_in_system' for non-signed users should deny access
     Failure/Error: Unable to find matching line from backtrace
     NoMethodError:
       undefined method `env' for nil:NilClass
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/devise-2.1.0/lib/devise/test_helpers.rb:33:in `warden'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-rails-2.10.0/lib/rspec/rails/adapters.rb:15:in `block (2 levels) in setup'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example.rb:178:in `instance_eval'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example.rb:178:in `instance_eval'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/hooks.rb:23:in `run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/hooks.rb:63:in `block in run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/hooks.rb:63:in `each'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/hooks.rb:63:in `run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/hooks.rb:400:in `run_hook'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:298:in `run_before_each_hooks'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example.rb:239:in `run_before_each'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example.rb:86:in `block in run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example.rb:195:in `with_around_each_hooks'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example.rb:84:in `run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:353:in `block in run_examples'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:349:in `map'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:349:in `run_examples'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:335:in `run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:336:in `block in run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:336:in `map'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:336:in `run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:336:in `block in run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:336:in `map'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:336:in `run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/command_line.rb:28:in `block (2 levels) in run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/command_line.rb:28:in `map'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/command_line.rb:28:in `block in run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/reporter.rb:34:in `report'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/command_line.rb:25:in `run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/runner.rb:69:in `run'
     # /Users/serg/.rvm/gems/ruby-1.9.3-head/gems/rspec-core-2.10.1/lib/rspec/core/runner.rb:10:in `block in autorun'

I tried to add that (spec/controllers/stats_controller_spec.rb):

describe StatsController do
  render_views
  include Devise::TestHelpers
  #...
end

But that changed nothing. How can i repair that?

UPD: My stats controller:

class StatsController < ApplicationController
  def users_in_system
    @users = User.all
  end
end

My navbar:

%div{ :class => "navbar navbar-inverse navbar-fixed-top" }
  %div{ :class => "navbar-inner" }
    %a{:class => "btn btn-navbar", "data-toggle" => "collapse", "data-target" => ".nav-collapse"}
      %span{:class=>"icon-bar"}
      %span{:class=>"icon-bar"}
      %span{:class=>"icon-bar"}

    = link_to t(".brand_name"), root_path, { :class => "brand" }
    %div{ :class => "nav-collapse" }
      -# Left navigation.
      %ul{ :class => "nav" }
        %li=link_to "About", about_path

      -# Right navigation.
      %ul{ :class => "nav pull-right" }
        - if user_signed_in?
          %li=link_to t(".settings"), edit_user_registration_path
          %li{ :class => "divider-vertical" }
          %li=link_to t(".logout_link"), destroy_user_session_path, :method => :delete
4
  • can you add app/views/layouts/_navbar_template.html.haml, several lines around line 16 if it's big; and some code from StatsController: users_in_system action and before/around filters if any? Commented Sep 3, 2012 at 17:52
  • @SergeBalyuk I added navbar and controller. Commented Sep 3, 2012 at 18:04
  • What happens if you don't render_views? Commented Sep 3, 2012 at 18:28
  • @RyanBigg I tried that. Error is same: Failure/Error: Unable to find matching line from backtrace NoMethodError: undefined method env for nil:NilClass Commented Sep 3, 2012 at 18:47

1 Answer 1

7

Your backtrace looks like you're using rspec-rails 2.10.0 which had this issue with setup callbacks order. Try upgrading version of that specific gem to 2.10.1 as it should have it fixed.

You're on the right path with

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
  #...
end

so I think you can remove explicit include Devise::TestHelpers from your spec file.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.