好的,所以我有点新鲜,但对我正在做的事情有点了解,但这个让我在过去的几个小时里难过,所以任何帮助都非常感激。我正在建立一个网站,并且一直在使用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
答案 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
结束
不幸的是,我不能提供任何见解,为什么需要添加该行,以前不需要。我必须把答案留给比我更了解的人。