Как я могу заглушить или смоделировать метод 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'}))

Вы можете получить доступ ко всему в рубине:)

Другие вопросы по тегам