2011-08-21 12 views
6

ho un spec/controllers/add_to_carts_spec.rb:metodo non definito `sign_in' per # <RSpec :: :: Nucleo ExampleGroup :: :: Nested_1 Nested_1: 0x1057fd428> errore durante il tentativo di creare RSpec con Devise

require 'spec_helper' 

describe CartItemsController do 

    before (:each) do 
    @user = Factory(:user) 
    sign_in @user 
    end 

    describe "add stuff to the cart" do 
    it "should add a product to the cart" do 
     product = FactoryGirl.create(:product) 
     visit products_path(product) 
     save_and_open_page 
     click_on('cart_item_submit') 
    end 
    end 

end 

e /spec/support/spec_helper.rb:

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'capybara/rspec' 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    config.mock_with :rspec 
    config.use_transactional_fixtures = true 
end 

... che carica anche /spec/support/devise.rb:

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

guardia è in esecuzione in background e mantiene gettando questo:

Failures: 

    1) CartItemsController add stuff to the cart should add a product to the cart 
    Failure/Error: sign_in @user 
    NoMethodError: 
     undefined method `sign_in' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x1057fd428> 
    # ./spec/controllers/add_to_carts_spec.rb:7 

Ho passato le ultime ore Coppia cercando varie regolazioni di configurazione e le diverse sintassi ma niente sembra cambiare. Qualche idea?

(a cura di riflettere l'errore più recente)

risposta

12

Quei aiutanti della prova non funziona per l'integrazione/richiesta spec. Il modo consigliato di testare Devise in queste situazioni è visitare la pagina di accesso, compilare il modulo e inviarlo, quindi eseguire il test.

Vedere David Chelimsky's answer a una precedente domanda SO su questo argomento per una spiegazione più completa.

+1

È una specifica del controller, quindi mi aspetto che funzioni. – solnic

+1

Grazie, hai ragione. Stavo confondendo due tipi di specifiche. Stavo usando capibara per visitare le pagine e quindi usare i suoi meccanismi di sessione, ma cercando di accedere all'utente come faccio nelle specifiche del mio controller. capibara non usa o ha accesso a quelli. –

14

Per qualche ragione anche questo non funziona per me, così ho solo includere manualmente questo helper in mie specifiche in questo modo:

describe CartItemsController do 
    include Devise::TestHelpers 

    # ... 
end 
+0

Davvero utile, grazie – Starkers

17

La soluzione ideale sarebbe quella di creare un file a spec/supporto/escogitare .RB e comprendono gli aiutanti di prova testamentaria nella configurazione Rspec attraverso il seguente codice:

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

il parametro tipo comprende gli aiutanti solo nelle vostre specifiche del controller, questo è quello di evitare problemi futuri che potrebbero derivare dalla sua invocazione, quando i test modelli o viste. È facoltativo

La ragione per cui abbiamo deciso di aggiungere un file discreto per includere gli helper, al contrario di includerli nelle specifiche come solnic ha fatto in precedenza è perché nel caso in cui le specifiche sono rigenerate, le specifiche verranno sovrascritte.

+0

Questa risposta non ha uptotes (diverso dal mio) e funziona molto bene. Non trascurare questo come una possibile soluzione. – Ecnalyr

+0

Sebbene questo sia il modo giusto per includere questi helper, il poster originale sta già utilizzando questo metodo senza successo. È la risposta giusta a una domanda diversa. – zznq

+0

La sezione sul parametro ': type' è dove questa domanda mi ha salvato un po 'di mal di testa. Non è documentato molto chiaramente nei documenti Devise sui test. – Matt

Problemi correlati