2015-11-09 5 views
1

я заметил, что мой тест на контроллер начал расти слишком большим, поэтому я переместил некоторые методы stubbing в отдельный модуль.автономный модуль автозагрузки во время тестирования в Rails

я положил его в тест/Библиотека/my_module.rb

module MyModule 
    def mymethod 
    end 
end 

так мой тестовый контроллер в тестовом/контроллеры/my_controller.rb теперь выглядит так:

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

я затем попытался сделать rails autoload path "test/lib" только во время тестов. для этого, я добавил следующие строки в конфиге/сред/test.rb

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

, но когда я запускаю мои тесты с «RAILS_ENV = тест тест граблей расслоение ехес», он бросает:

rake aborted! 
NameError: uninitialized constant MyControllerTest::MyModule 

если я поставил те же две строки в config/application.rb, все работает хорошо. но я не хочу загружать этот модуль f.ex. в производстве.

так почему это происходит и как я могу это исправить? и что такое лучшая практика Rails для хранения кода, специфичного для тестирования?

ответ

3

I место хелперы под 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 

Это нормальная практика для акций модулей с помощью теста спецификации.

 Смежные вопросы

  • Нет связанных вопросов^_^