2017-08-22 14 views
7

ruby​​、rspec、capybara、seleniumでWebアプリケーションをテストしています。私は解決方法がわからない例外uninitialized constant ActiveAdminLoginPageに遭遇しました。 spec_helper.rbでRubyのファイル名から動的にautoloadコマンドを作成する

私は次のことを必要としています:

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

私は

spec/page_objects/active_admin_login_page.rb 

から継承残念ながら、サブクラスが親の前にロードされている2つのクラス

spec/page_objects/products/active_admin_login_page.rb 

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

を持っていますクラス。

ディレクトリ内のすべてのファイル名から動的にオートロードコマンドを作成するにはどうすればよいですか? 私は、このコマンドを交換したいと思います:自動ロードコマンドで

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

を。

+1

でそれをしませんか?これは不足定数に基づいてautomaticalyファイルを読み込むだろうか?この機能が組み込まれていないため、おそらくラッパーを作成する必要があります。問題はどのように動作するのだろうかということです。典型的には、各ファイルに対して 'require(_relative)'によってすべての依存関係を読み込みます。自動的に作業を行うには、ロードするファイルを計算するために厳密な命名規則が必要です。 – insider

答えて

4

requireを使用して、必要なファイルに依存関係をロードするのはどうですか?

requireは1回だけファイルを読み込むため、副作用は発生しません。

または、より良い、あなたは、ボンネットの下にrequireを使用していますauto_loadを、使用することができますが、それはよりスマートな方法あなたが自動ロードから期待し何を行動

autoload :ActiveAdminLoginPage, 'active_admin_login_page' 
+0

これはうまくいくことは分かっていますが、手動で追加することよりもファイルの自動読み込みが好きです。もし私がautoloadingのための解決策を見つけられなかったら、私はこのアプローチのために行くが、前に私はファイルを自動ロードしようとしたい。 –

+0

シンボルを作成する方法を知っていますか:ActiveAdminLoginPage from 'active_admin_login_page'?私はpage_objectディレクトリからすべてのファイルを読むので、私はこれを動的に行う必要があります。 –

+0

特別な作業は必要ありません。 http://lifeonubuntu.com/use-rubys-autoload-instead-of-require-for-your-ruby-and-rails-apps/ –

関連する問題