2012-01-25 16 views
7

मेरे पास एक समान त्रुटि है, लेकिन सभी मेरी समस्या को ठीक नहीं करेंगे।devise फेंकने के साथ rspec एकीकरण परीक्षण NoMethodError त्रुटि

मेरे फ़ाइल 'कल्पना/अनुरोध/news_controller_spec.rb' की तरह दिखता है:

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 

मैं परीक्षण चलाने अगर मैं मिल जाएगा:

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' 

मैं https://github.com/plataformatec/devise/wiki/How-To%3a-Controllers-and-Views-tests-with-Rails-3-%28and-rspec%29 और अन्य समान पर निर्देशों का पालन किया यहां प्रश्न, लेकिन मुझे कोई समाधान नहीं मिल रहा है।

मैं निम्नलिखित gemset उपयोग कर रहा हूँ:

  • capybara (1.1.2)
  • वसीयत (1.5.3)
  • factory_girl_rails (1.6.0)
  • रेल (3.2.0, 3.1.1)
  • rspec (2.8.0)
  • rspec कोर (2.8.0)
  • rspec-उम्मीदों (2.8.0)
  • rspec-mocks (2.8.0)
  • rspec-रेल (2.8.1)

और कुछ अन्य जवाहरात।

क्या कोई मेरी मदद कर सकता है, लॉग इन उपयोगकर्ता के साथ मेरा एकीकरण परीक्षण प्राप्त कर रहा है। इस मामले में समाचार केवल तभी प्रदर्शित होते हैं, यदि उपयोगकर्ता लॉग इन होता है।

धन्यवाद।

+0

क्या आप वाकई 'टेस्ट :: Unit' और' RSpec' विन्यास को मिलाया नहीं किया है? * Rspec-rails-2.0.0 और devise-1.1 के रूप में, अपने चश्मे में तैयार करने का सबसे अच्छा तरीका है spec_helper में निम्नलिखित को जोड़ने के लिए: * https://gist.github.com/1682113 – jibiel

+0

मुझे उम्मीद है। मेरे पास एक फ़ाइल _spec/support/devise.rb_ है और इस फ़ाइल में मैंने 'RSpec.configure do | config | लिखा था। config.in शामिल करें Devise :: TestHelpers,: type =>: नियंत्रक अंत'। समर्थन-निर्देशिका में फ़ाइलों को 'Dir [Rails.root.join ("spec/support/**/*। Rb")] द्वारा शामिल किया जाना चाहिए। प्रत्येक {| f | एफ} की आवश्यकता है। सही? –

+0

http://stackoverflow.com/questions/6725169/testing-models-with-rspec-using-devise आप निश्चित रूप से भूल गए हैं: टाइप =>: नियंत्रक' भाग। बस इसे हटा दिया और एक ही त्रुटि मिली। – jibiel

उत्तर

9

मैं वास्तव में एक ही सटीक समस्या थी, और एक छोटा सा googling के बाद मैंने पाया कि Warden::Test::Helpers सहित सीधे अनुरोध चश्मा के लिए एक अधिक संक्षिप्त समाधान था, क्योंकि यह प्रोग्राम के रूप में/बाहर उन सिर्फ इस तरह के संकेत:

# 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 

संक्षेप में, बस Warden::Test::Helpers शामिल करें और फिर login_as <your_user> विधि का उपयोग करें और यह है!

समाधान यहाँ से लिया: http://simple10.com/rspec-capybara-devise-login-tests/

+2

इसके अलावा, ध्यान दें कि डेविस :: टेस्टहेल्पर केवल तभी काम करते हैं जब आप नियंत्रक वर्ग का वर्णन करते हैं जैसे: न्यूज कंट्रोलर का वर्णन ... इसके बजाय ... न्यूज़ कंट्रोलर " –

संबंधित मुद्दे