rspec capybara - тесты поддоменов - PullRequest
1 голос
/ 24 февраля 2012

Когда я создаю интеграционные тесты с помощью capybara / rspec, кажется, что получаются правильные URL и пути.Но он вызывает ошибку на кнопке click_button.

Примечание. Параметр «current_url» возвращает правильный путь: http://StoreName1.lvh.me/login

Тест:

require 'spec_helper'

describe "Account access" do

  before(:each) do
    Factory(:plan)
    Factory(:theme)
    @account = Factory(:account)
    set_host("#{@account.url}")
    end

  describe "GET /login" do
    it "should not sign in for invalid details" do
      Factory(:account, :url => 'dan', :email => 'dan@example.com')
      visit "/login"
      page.should have_content("Sign in to your store")
      fill_in "email", with: "bob@example.com"
      fill_in "password", with: "donuts"
      click_button 'Sign in'
    end

  end

    def set_host(host)
    host! host
    Capybara.app_host = "http://" + host + ".lvh.me"
    end

end

Журнал ошибок:

  1) Account access GET /login should not sign in for invalid details
     Failure/Error: click_button 'Sign in'
     ActiveRecord::RecordNotFound:
       Couldn't find Account with url = StoreName1
     # ./app/controllers/application_controller.rb:11:in `get_account_info'
     # (eval):2:in `click_button'
     # ./spec/requests/accounts_spec.rb:19:in `block (3 levels) in <top (required)>'

1 Ответ

2 голосов
/ 25 февраля 2012

Я думаю, что ваш набор хостов должен выглядеть примерно так:

def set_host(host)
  host! = "http://#{host}.lvh.me:#{Capybara.server_port}"
end

def host!(&block)
  before do
    Capybara.current_session.driver.reset!
    host! instance_eval(&block)
    @old_app_host, Capybara.app_host = Capybara.app_host, "http://#{host}"
    @old_default_host, Capybara.default_host = Capybara.default_host, "http://#{host}"
  end

  after do
    Capybara.current_session.driver.reset!
    Capybara.app_host = @old_app_host
    Capybara.default_host = @old_default_host
  end
end
...