2012-09-03 25 views
2

我有這樣規範(規格/控制器/ stats_controller_spec.rb)來測試我的控制器:導軌3 + +設計Rspec的 - 在控制器檢測未定義的方法錯誤

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 

當運行該規範我得到這樣錯誤

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)>' 

我試圖通過加入這一行至(規格/ spec_helper.rb)來解決這個錯誤:

#... 

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

然後,我開始得到這樣的錯誤:

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' 

我想補充一點,(規格/控制器/ stats_controller_spec.rb):

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

但是,什麼也沒有改變。我該如何修復?

UPD: 我的統計控制器:

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

我的導航欄:

%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 
+0

如果它很大,你可以添加'app/views/layouts/_navbar_template.html.haml',圍繞第16行多行;從'StatsController'一些代碼:'users_in_system'動作,如果任何前/過濾器周圍? –

+0

@SergeBalyuk我加入導航欄和控制器。 – ExiRe

+0

如果你*不*'render_views'會發生什麼事? –

回答

7

你回溯看起來像你使用rspec-rails2.10.0其中有this issue與設置回調順序。嘗試升級特定寶石的版本2.10.1,因爲它應該有它固定的。

你是在正確的道路上

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

所以我覺得你可以從你的規範文件中刪除明確include Devise::TestHelpers

相關問題