2015-07-26 1 views
1

У меня есть свой камень, и мой railtie выглядит ...Как вызвать инициализаторы Railtie в моих тестах?

class MyRailtie < Rails::Railtie 
    initializer "my_railtie.configure_rails_initialization" do 
    # some initialization behavior 
    end 
end 

, и я стараюсь, чтобы проверить это, но в тестах инициализатор никогда не вызывается. И я замечаю, что у меня есть некоторые зависимости в других драгоценных камнях, у которых есть инициализатор, и они также не вызываются.

Знаете ли вы, что я должен делать, кроме того, что требуется файл?

+0

Попробуйте Rails.application.initialize! – TheJKFever

+0

Rails.application is nil –

ответ

3

Поскольку инициализаторы являются частью функциональности Rails, вам необходимо загрузить этот Railtie в приложение Rails, чтобы оно вызывалось автоматически. Обычно это делается путем создания небольшого Rails-приложения внутри вашей папки спецификаций, но это боль для настройки вручную. К счастью, есть отличный драгоценный камень, который называется combustion, что делает испытательные двигатели (или драгоценные камни с рельсами) легким ветром. Он позаботится о том, чтобы настроить это приложение Rails для вас и обеспечить, чтобы ваши тесты выполнялись в среде Rails (включая запуск этого инициализатора).

+0

Нам действительно нужно фиктивное приложение? Я видел, что некоторые драгоценные камни ему не нужны, и все еще нужны рельсы. –

+0

Это зависит от того, какую функциональность Rails использует ваш драгоценный камень. Поскольку вы хотите протестировать инициализаторы, к сожалению, довольно сложно запускать их изолированно - метод [run_initializers] (http://api.rubyonrails.org/classes/Rails/Initializable.html#method-i-run_initializers) имеет недокументированные аргументы и, вероятно, ожидает приложение Rails. Технически вы могли бы понять все это, но я думаю, что это было бы более грязным и более хрупким, чем использование «горения». Вы также можете перенести код в своем инициализаторе на метод, вызывать этот метод из своих тестов и просто надеяться, что Railtie работает так, как ожидалось. –

+0

Я копаю жемчужину горения! Очень хорошо. Гораздо меньше «лесов» для приложения «rails» :) +1 – Volte