rspec水豚 - 子域测试

问题描述:

当我用capybara/rspec创建集成测试时,它似乎得到了正确的url和路径。但它在'click_button'上出错。rspec水豚 - 子域测试

注: '把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 => '[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 

错误日志:

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

不应该的网址是http://StoreName1.lvh.me:3000/login? – 2012-02-25 07:52:33

我想您所设定的主机应该看更像是:

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 
+1

这是什么!bang对变量做些什么? – Galaxy 2012-02-27 09:50:00

+0

增加了预定义功能的清晰度。 – 2012-03-06 19:17:55