4

コントローラーのテストが大きくなりすぎていることに気付いたので、いくつかのスタブ メソッドを別のモジュールに移動しました。

私はそれをtest/lib/my_module.rbに入れました

module MyModule
  def mymethod
  end
end

したがって、test/controllers/my_controller.rb のコントローラー テストは次のようになります。

class MyControllerTest < ActionController::TestCase
  include MyModule
  def test_something
  end
end

次に、テスト中にのみレール自動ロードパス「test/lib」を作成しようとしました。このために、config/environments/test.rb に次の行を追加しました。

config.autoload_paths += ["#{config.root}/test/lib"]
config.eager_load_paths += ["#{config.root}/test/lib"]

しかし、「RAILS_ENV=test bundle exec rake test」でテストを実行すると、次のようにスローされます。

rake aborted!
NameError: uninitialized constant MyControllerTest::MyModule

config/application.rb に同じ 2 行を入れると、すべてうまくいきます。しかし、私はこのモジュールf.exをロードしたくありません。生産中。

なぜそれが起こるのですか?どうすれば修正できますか?また、テスト固有のコードを維持するためのRailsのベストプラクティスは何ですか?

4

1 に答える 1

9

私はヘルパーを配置test/support/*.rbし、それを含めます:

test/test_helper.rb:

# some code here

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

class ActiveSupport::TestCase
  include Warden::Test::Helpers
  include Auth # <- here is a helper for login\logout users in the test env
  # some code here

モジュールをテスト仕様で共有するのは通常の方法です。

于 2015-11-09T13:51:15.183 に答える