2012-01-25 17 views
7

Burada yayınlanan benzer bir hata var, ama hepsi benim sorunumu gidermez.devise atar ile rspec entegrasyon testi NoMethodError hatası

Dosyam 'Spec/istek/news_controller_spec.rb' benziyor: Testi çalıştırırsanız

require 'spec_helper' 

describe "NewsController" do 

    include Devise::TestHelpers 

    describe "GET /news" do 

    before(:each) do 
     @request.env["devise.mapping"] = Devise.mappings[:user] 
     @user = Factory.create(:user) 
     @user.confirm! 
     sign_in @user 
    end 

    it "after login should show the latest news an screen" do 
     page.should have_content("News") 
    end 
    end 
end 

Ben alırsınız:

Failures: 

    1) Campaigns GET /news works! 
    Failure/Error: Unable to find matching line from backtrace 
    NoMethodError: 
     undefined method `env' for nil:NilClass 
    # /Users/.../gems/devise-1.5.3/lib/devise/test_helpers.rb:25:in `setup_controller_for_warden' 
    # /Users/.../gems/rspec-rails-2.8.1/lib/rspec/rails/adapters.rb:15:in `block (2 levels) in setup' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/hooks.rb:35:in `instance_eval' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/hooks.rb:35:in `run_in' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/hooks.rb:70:in `block in run_all' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/hooks.rb:70:in `each' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/hooks.rb:70:in `run_all' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/hooks.rb:368:in `run_hook' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example_group.rb:292:in `block in run_before_each_hooks' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example_group.rb:292:in `each' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example_group.rb:292:in `run_before_each_hooks' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example.rb:217:in `run_before_each' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example.rb:79:in `block in run' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example.rb:173:in `with_around_hooks' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example.rb:77:in `run' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example_group.rb:355:in `block in run_examples' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example_group.rb:351:in `map' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example_group.rb:351:in `run_examples' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example_group.rb:337:in `run' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example_group.rb:338:in `block in run' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example_group.rb:338:in `map' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/example_group.rb:338:in `run' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/command_line.rb:28:in `block (2 levels) in run' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/command_line.rb:28:in `map' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/command_line.rb:28:in `block in run' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/reporter.rb:34:in `report' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/command_line.rb:25:in `run' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:80:in `run_in_process' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:69:in `run' 
    # /Users/.../gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:10:in `block in autorun' 

Ben https://github.com/plataformatec/devise/wiki/How-To%3a-Controllers-and-Views-tests-with-Rails-3-%28and-rspec%29 ve benzeri diğer talimatları takip Burada sorular var, ama bir çözüm bulamıyorum. ,

  • Kapibara (1.1.2)
  • vasiyetle (1.5.3)
  • factory_girl_rails (1.6.0)
  • raylar (3.2.0:

    aşağıdaki gemset kullanıyorum 3.1.1)

  • RSpec (2.8.0)
  • RSpec çekirdekli (2.8.0)
  • RSpec-beklentiler (2.8.0)
  • RSpec-mocks (2.8.0)
  • RSpec-raylar (2.8.1)

ve diğer bazı taşlar.

Oturum açmış bir kullanıcıyla tümleştirme sınamalarımın çalıştırılmasına yardımcı olan herhangi biri bana yardımcı olabilir. Bu durumda haberler yalnızca bir kullanıcı giriş yaptığında görüntülenir.

Teşekkürler.

+0

musunuz? * Rspec-raylar-2.0.0 ve devise-1.1'den itibaren, teknik özelliklerinizi geliştirmenin en iyi yolu aşağıdakileri spec_helper'a eklemektir: * https://gist.github.com/1682113 – jibiel

+0

Umarım öyle olur. _spec/support/devise.rb_ bir dosyam var ve bu dosyada 'RSpec.configure do | config | yazdım. config.include Devise :: TestHelpers,: type =>: controller end'. Destek dizinindeki dosyalar "Dir [Rails.root.join" ("spec/support/**/*. Rb")] ile belirtilmelidir. f} gerektirir. Sağ? –

+0

http://stackoverflow.com/questions/6725169/testing-models-with-rspec-using-devise Kesinlikle unuttuysanız: type =>: controller' part. Sadece kaldırıldı ve aynı hatayı aldım. – jibiel

cevap

9

Aslında tamamen aynı problem vardı ve programlı sadece bu gibi/çıkış kullanıcıları imzalar beri biraz Googling sonra, Warden::Test::Helpers dahil doğrudan istek özellikleri için daha özlü çözüm olduğunu bulduk:

# spec/support/request_helpers.rb 
require 'spec_helper' 
include Warden::Test::Helpers 

module RequestHelpers 
    def create_logged_in_user 
    user = Factory(:user) 
    login(user) 
    user 
    end 

    def login(user) 
    login_as user, scope: :user 
    end 
end 

Kısaca, Warden::Test::Helpers'u dahil edin ve login_as <your_user> yöntemini kullanın ve işte bu! Burada alınan

Çözüm: Eğer `Testi :: Unit` ve` RSpec` yapılandırmaları karışık değil emin http://simple10.com/rspec-capybara-devise-login-tests/

+2

Ayrıca, Devise :: TestHelpers sadece aşağıdaki gibi bir denetleyici sınıfını açıklarsanız aşağıdakileri dikkate alınız: NewsController ... tanımlayın ... "NewsController" tanımlayın –

İlgili konular