Ruby

2017-08-22 94 views
7

dosya adlarından dinamik olarak autoload komutunu oluşturun Ruby, rspec, capybara ve selenium ile bir web uygulaması test ediyorum ve nasıl çözüleceğimi bilmediğim bir uninitialized constant ActiveAdminLoginPage İstisnaya girdim. spec_helper.rb olarakRuby

i gerektiren am aşağıdaki gibidir:

Dir[File.join(Dir.pwd, 'spec/page_objects/**/*.rb')].each { |f| require f } 

I

spec/page_objects/active_admin_login_page.rb 

ne yazık ki, alt sınıfı, ana önce yüklenen 2 sınıfları

spec/page_objects/products/active_admin_login_page.rb 

module Products 
    class ActiveAdminLoginPage < ::ActiveAdminLoginPage 
    ... 
    end 
end 

devralır sahip sınıf.

Nasıl bir dizindeki tüm dosya adlarından dinamik bir özdevinimli_yükle komutu oluşturulur? ben bu komutu yerine istiyorum: Bir özdevinimli_yükle komutuyla

Dir[File.join(Dir.pwd, 'spec/page_objects/**/*.rb')].each { |f| require f }

.

+1

bunu yapar? Eksik dosyaya göre otomatik olarak yüklenen dosya mı olacak? Bu işlevsellik kurulmadığı için büyük ihtimalle bir "sarmalayıcı" yazmanız gerekecektir. Soru şu ki, nasıl davranmasını beklersiniz. Tipik olarak, her bir dosya için 'bağımlı (_relative)' yoluyla tüm bağımlılıkları yüklersiniz. İşi otomatik olarak yapmak için, yüklenecek dosyaları hesaplamak için nispeten sıkı adlandırma kuralına ihtiyacınız olacaktır. – insider

cevap

4

Nasıl ihtiyacı dosyasında bağımlılık yüklemek için require kullanmak hakkında? Eğer herhangi bir yan etkisi karşılaşmayacaktır böylece

require

, sadece bir kez bir dosyayı yükler.

Veya daha da iyisi, sen, kaputun altında require kullanır auto_load kullanabilirsiniz ama daha akıllı bir yol sen autoload beklediği Neler davranış

autoload :ActiveAdminLoginPage, 'active_admin_login_page' 
+0

Bunun işe yarayacağını biliyorum, ancak ekleyerek dosyaların otomatik yüklenmesini tercih ederim. Otomatik yükleme için bir çözüm bulamazsam, o zaman bu yaklaşıma gidiyorum, ancak dosyaları otomatik olarak yüklemeyi denemeden önce. –

+0

Eğer sembol oluşturmak biliyor musunuz: ActiveAdminLoginPage 'active_admin_login_page' dan? Page_object dizinindeki tüm dosyaları okuduğum için bunu dinamik olarak yapmalıyım. –

+0

Özel bir şey yapmanıza gerek yok. http://lifeonubuntu.com/use-rubys-autoload-instead-of-require-for-your-ruby-and-rails-apps/ göz atın –