Как я могу заглушить или смоделировать метод request.subdomains в Rails?
Я пытаюсь написать несколько функциональных тестов в моем приложении rails, и в application_controller.rb у меня есть это:
before_filter :current_account
def current_account
@current_account ||= Account.find_by_subdomain!(request.subdomians.first)
end
При запуске тестов, request.subdomains
не содержит действительных поддоменов, которые я ищу, и делает невозможным выполнение каких-либо функциональных тестов.
Можно ли заглушить current_account
метод или издеваться request.subdomains
объект?
3 ответа
Решение
В вашем функциональном тесте вы должны уметь (используя мокко):
@request.expects(:subdomains).returns(['www'])
Для меня (и с Rails 2.3.4) правильное утверждение
@controller.request.expects(:subdomains).returns(['www'])
так как я не могу получить доступ к @request напрямую.
@controller.instance_variable_set(:@request, OpenStruct.new({:subdomains => 'www'}))
Вы можете получить доступ ко всему в рубине:)