Рельсы rspec устанавливают субдомен

Я использую rSpec для тестирования моего приложения. В моем controllerе приложений у меня есть такой метод:

def set_current_account @current_account ||= Account.find_by_subdomain(request.subdomains.first) end 

Можно ли установить request.subdomain в моей спецификации? Может быть, в предыдущем блоке? Я новичок в rSpec, поэтому любые советы по этому поводу будут очень благодарны.

Eef

Я выяснил, как сортировать эту проблему.

В моем перед блоке в моих спецификациях я просто добавил:

 before(:each) do @request.host = "#{mock_subdomain}.example.com" end 

Это настраивает request.subdomains.first значение mock_subdomain.

Надеюсь, что кто-то посчитает это полезным, так как он не очень хорошо объясняется где-либо еще в сети.

Я знаю, что это относительно старый вопрос, но я обнаружил, что это зависит от того, какой тест вы используете. Я также запускаю Rails 4 и RSpec 3.2, поэтому я уверен, что некоторые вещи изменились с тех пор, как был задан этот вопрос.

Запросить спецификации

 before { host! "#{mock_subdomain}.example.com" } 

Особенности функции Capybara

 before { Capybara.default_host = "http://#{mock_subdomain}.example.com" } after { Capybara.default_host = "http://www.example.com" } 

Обычно я создаю модули в spec/support которые выглядят примерно так:

 # spec/support/feature_subdomain_helpers.rb module FeatureSubdomainHelpers # Sets Capybara to use a given subdomain. def within_subdomain(subdomain) before { Capybara.default_host = "http://#{subdomain}.example.com" } after { Capybara.default_host = "http://www.example.com" } yield end end # spec/support/request_subdomain_helpers.rb module RequestSubdomainHelpers # Sets host to use a given subdomain. def within_subdomain(subdomain) before { host! "#{subdomain}.example.com" } after { host! "www.example.com" } yield end end 

Включить в spec/rails_helper.rb :

 RSpec.configure do |config| # ... # Extensions config.extend FeatureSubdomainHelpers, type: :feature config.extend RequestSubdomainHelpers, type: :request end 

Затем вы можете позвонить в свою спецификацию так:

 feature 'Admin signs in' do given!(:admin) { FactoryGirl.create(:user, :admin) } within_subdomain :admin do scenario 'with valid credentials' do # ... end scenario 'with invalid password' do # ... end end end 

В rails 3 все, что я пытался настроить вручную, не работало, но, глядя на код, я заметил, как приятно они разбираются в пути, который вы передаете помощникам запроса, например get . Конечно, если ваш controller идет и выбирает пользователя, упомянутого в субдомене, и сохраняет его как @king_of_the_castle

 it "fetches the user of the subomain" do get "http://#{mock_subdomain}.example.com/rest_of_the_path" assigns[:king_of_the_castle].should eql(User.find_by_name mock_subdomain) end 
  • Rspec – 3,6,0
  • Капибара – 2.15.1

Ответ Криса Петерса работал для меня для спецификаций Request, но для спецификаций Feature мне пришлось внести следующие изменения:

rails_helper:

 Capybara.app_host = 'http://lvh.me' Capybara.always_include_port = true 

feature_subdomain_helpers:

 module FeatureSubdomainHelpers def within_subdomain(subdomain) before { Capybara.app_host = "http://#{subdomain}.lvh.me" } after { Capybara.app_host = "http://lvh.me" } yield end end 
Interesting Posts

Что представляет собой значок Windows 8 в качестве значка прямоугольника в строке заголовка?

Как передать пользовательский тип таблицы как хранимый параметр в C #

Назначение Fortran для атрибута объявления и SAVE

Выполнение функции в фоновом режиме при использовании ограниченного количества ядер / streamов и очереди дополнительных исполнений?

Информация о дорожке текущей музыки

Отображать данные JSON в таблице HTML

Где скачать Flash Player для автономной установки?

Как я могу эффективно заменить значок для документов / файлов определенного типа?

Действительно ли исключения для исключительных ошибок?

Интеграция tomcat и eclipse в качестве среды для быстрого развертывания

Простое использование веб-службы в Java

Erlang списки с одиночными номерами более 8?

Чтение CSV-файлов в C #

проверьте, была ли включена блокировка или нет.

Не удается войти в Office и OneNote не может подключиться к SkyDrive в Windows 8.1

Давайте будем гением компьютера.