2013-12-16 9 views
10

Bir raylar 4 uygulaması yapıyorum ve garip bir problemle karşı karşıyayım: Bir giriş benzetimini yapmak için oluşturduğum bir destek dosyası bana tanımlanmamış bir yöntem hatası veriyor. İşte rspec için raylara 4 bir destek dosyası nasıl eklenir?

dosyaları
#spec/support/spec_test_helper.rb 
module SpecTestHelper 
    def login(user) 
    request.session[:user_id] = user.id 
    end 

    def current_user 
    User.find(request.session[:user_id]) 
    end 
end 

#spec_helper.rb 

config.include SpecTestHelper, :type => :controller 

ve benim denetleyicisi spec BTW Cancan test ediyorum

describe BooksController, "user role" do 

    user = Fabricate(:user) do 
    role { Role.find_by_account_type("user") } 
    end 

    login(user) 
end 

içindedir; Ben CanCan yeteneği test ediyor test etmek doğru yol biliyorum ama bu zaten

Bu hata mesajının bir parçası olan :) bitti:

spec/controllers/books_controller_spec.rb:27:in `block in <top (required)>': undefined method `login' for #<Class:0x007f9f83193438> (NoMethodError) 
+0

Lütfen tam hata mesajını ekleyin. – screenmutt

cevap

2

yerine, bir before veya it blok içinde login(user) çağrıyı koyun doğrudan describe içinde:

let(:user) do 
    Fabricate(:user) do 
    role { Role.find_by_account_type("user") } 
    end 
end 

before do 
    login(user) 
end 
+0

Evet! Çok teşekkür ederim, sorun buydu. – Ricbermo

20

ben spec_helper.rb bu satırı eklendi ve 3 Raylar çalışır

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

Belki başka (daha güzel) çözümü @gotva tarafından sağlanan cevaba

+0

benim spec_helper.rb adresinde zaten var. – Ricbermo

+1

'a teşekkürler, bu yüzden @ Ash'ın cevabına dikkat edin - gerçekten kayıtlar yapmalı ve içindeki/çağrı yöntemlerini çağırmalısınız ... – gotva

2

Alternatif bulunmaktadır. Biraz daha ayrıntılı, ama her iki Raylar 3 ve 4 çalışacak: Ben rayların sürümünü 4.2.4 kullanıyorum ve destek klasörü altında bir dosya eklemek için dün çalışıyordu

Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f} 
7

. Sorun şu ki, iki dosyanın rspec dir altındaki farklı amaçlarını fark etmemiştim. Ben hem rails_helper.rb hem de spec_helper.rb var. Eğer raylar bağımlı sınıflar için destek sağlamak istiyorsanız, 'Spec/destek' dir

Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } 

ve içeride kullanmak istediğiniz paylaşılan modül ilan etmek altındaki modülleri yüklemek için raylar anlatmak için rails_helper kullanmalıdır yapılandırma bloğu.

RSpec.configure do |config| 
    ... 
    config.include <YourModuleName>::<YourClassName>, :type => :controller 
    ... 
end 

Ama sınıf hiç raylar gerektirmez, eğer sen testler raylar yüklemez, hangi spec_helper altında yükleyebilirsiniz. Daha fazla bilgi edinmek için this answer ve this reference'a bakın.