Rspec / Capybara问题 - Capybara不会访问页面

时间:2014-06-29 14:07:37

标签: ruby-on-rails ruby rspec capybara factory-bot

好的,所以我有点新鲜,但对我正在做的事情有点了解,但这个让我在过去的几个小时里难过,所以任何帮助都非常感激。我正在建立一个网站,并且一直在使用Rspec和Capybara测试我的网站,因为我正在移动。我最终需要删除turbolinks来改进我的jscripts的功能。下次我尝试运行测试时,我的测试套件中有50%只是神奇地破坏了。我已经将其缩小到所有失败之间的共同点,即"访问"要么出现在代码块中,要么就在代码块之前。所以基本上删除Turbolinks会以某种方式炸毁Capybara或Rspec。我真的很难解决这个问题。我尝试更新那些没有用的宝石。我想下一步是要么跳过我不想做的TDD概念,要么开始卸载宝石并重新安装并祈祷这不能使我的应用无用......任何帮助任何人都可以提供非常感谢,如果你在纽约,我会给你买啤酒。

还有其他一些失败的测试不需要任何形式的身份验证,只是检查页面的标题和内容,而这些都是失败的。我提起这件事只是为了说我不认为FactoryGirl造成了这个问题。

干杯。

错误

2) User pages profile page                                                                                                                                                                  
 Failure/Error: before { visit user_path(user) }                                                                                                                                          
 NoMethodError:                                                                                                                                                                           
   undefined method `user_path' for #<RSpec::ExampleGroups::UserPages::ProfilePage:0x00000004290410>                                                                                      
 # ./spec/requests/user_pages_spec.rb:10:in `block (3 levels) in <top (required)>'                                                                                                        

3) User pages profile page                                                                                                                                                                  
 Failure/Error: before { visit user_path(user) }                                                                                                                                          
 NoMethodError:                                                                                                                                                                           
   undefined method `user_path' for #<RSpec::ExampleGroups::UserPages::ProfilePage:0x00000004207c00>                                                                                      
 # ./spec/requests/user_pages_spec.rb:10:in `block (3 levels) in <top (required)>'                                                                                                        

4) User pages signup page                                                                                                                                                                   
 Failure/Error: before { visit signup_path }                                                                                                                                              
 NameError:                                                                                                                                                                               
   undefined local variable or method `signup_path' for #<RSpec::ExampleGroups::UserPages::SignupPage:0x000000041b3088>                                                                   
 # ./spec/requests/user_pages_spec.rb:18:in `block (3 levels) in <top (required)>'

测试套件代码

require 'spec_helper'

describe "User pages" do 

subject { page }

#Profile tests
describe "profile page" do 
    let(:user) { FactoryGirl.create(:user) }
    before { visit user_path(user) }

    it { should have_content(user.name) }
    it { should have_title(user.name) }
end 

#Signup page tests
describe "signup page" do 
    before { visit signup_path }

    it { should have_content('Sign up') }
    it { should have_title(full_title('Sign up')) }
end 

describe "signup" do 

    before { visit signup_path }

    let(:submit) { "Create my account" }

    describe "with invalid information" do 
        it "should not create a user" do 
            expect { click_button submit }.not_to change(User, :count)
        end 
    end 

    describe "with valid information" do 
        before do
            fill_in "Name",                 with: "Example User" 
            fill_in "Email",                with: "user@example.com"
            fill_in "Password",             with: "foobar00"
            fill_in "Confirmation",         with: "foobar00" 
        end 

        it "should create a user" do 
            expect { click_button submit }.to change(User, :count).by(1)
                end
           end 
      end
end

2 个答案:

答案 0 :(得分:1)

尝试从阻止之前删除您的访问页面。

所以,你只需要:

describe "signup page" do 
  feature "should have content 'Sign up' "
   visit signup_path  
   it { should have_content('Sign up') }
  end
  feature "should have full title 'Sign up' "
   visit signup_path  
   it { should have_title(full_title('Sign up')) }
  end
end 

你需要在每个描述块中都这样做。

答案 1 :(得分:0)

好的,对于遇到这个问题的其他人,我做了一些更多的挖掘并不是因为Capybara有时会变得奇怪。但是我通过在spec_helper.rb文件中添加“config.include Rails.application.routes.url_helpers”来修复路径错误并传递绿色。

Rspec.configure do |config|
*
*
* 
config.include Rails.application.routes.url_helpers

结束

不幸的是,我不能提供任何见解,为什么需要添加该行,以前不需要。我必须把答案留给比我更了解的人。