Reputation: 3400
When I create integration tests with capybara/rspec it seems to get the correct url and paths. But it errors out on the 'click_button'.
Note: 'puts current_url' returns the correct path: http://StoreName1.lvh.me/login
Test:
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 => '[email protected]')
visit "/login"
page.should have_content("Sign in to your store")
fill_in "email", with: "[email protected]"
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
Error Log:
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)>'
Upvotes: 1
Views: 1936
Reputation: 9529
I think your set host should look more like:
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
Upvotes: 2