Reputation: 4767
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
Upvotes: 2
Views: 3381
Reputation: 3462
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.
Upvotes: 7