感谢回复 我在应用程序Git application with the error
中收到错误Failures:
1) Page pages page creation with invalid information should not create a page
Failure/Error: before(:each) { visit new_admin_page_path }
NoMethodError:
undefined method `visit' for #<Page:0x00000005094bb0>
# ./spec/requests/page_request_spec.rb:13:in `block (3 levels) in <top (required)>'
2) Page pages page creation with invalid information error messages
Failure/Error: before(:each) { visit new_admin_page_path }
NoMethodError:
undefined method `visit' for #<Page:0x000000051671f0>
# ./spec/requests/page_request_spec.rb:13:in `block (3 levels) in <top (required)>'
Finished in 1.21 seconds
14 examples, 2 failures
我错过了什么?
答案 0 :(得分:10)
我克隆了您的存储库并运行了规范。问题是您使用的术语page
用于两个不同的内容,Capybara页面(subject { page }
)和名称为Page
的模型(您也将其命名为page
} )。这两个名称冲突,这就是为什么rspec抱怨visit
没有方法#<Page:0x00000005094bb0>
。
要解决此问题,只需重命名您在初始let
中创建的页面:
let(:mypage) { Factory.create(:page) }
这可以通过命名您的网页模型mypage
而不是page
来避免冲突。
但是还有其他问题。您的用户工厂不使用序列来分配电子邮件,因此您会收到验证错误,因为它表示电子邮件已被删除。
我将您的用户工厂更改为:
sequence(:email) { |n| "abc#{n}@example.com"}
factory :user do
email
password "foobar"
password_confirmation "foobar"
...
修复了验证错误,但现在又出现了另一个错误。在第一个规范的第一行中,您应该检查类 count
上的Page
是否发生了变化,而不是记录 {{1 (或page
)。
所以改为:
mypage
这将仍给您留下错误,因为您expect { click_button "Create Page" }.not_to change(Page, :count)
也没有create
行动。从您所写的内容来看,信息似乎无效,因此它甚至不应该采取这种行动。我不知道你到底想要做什么,所以我会留下剩下的让你弄清楚。
答案 1 :(得分:6)
如果您最近升级到Capybara 2.0&amp;您的集成测试与以前版本的Capybara一起使用,您可以尝试将请求目录重命名为功能。查看http://www.codelearn.org/blog/how-to-make-old-integration-tests-work-with-capybara-2-0
答案 2 :(得分:3)
将以下内容添加到spec/spec_helper.rb
(在Spork.prefork
区块中):
require 'capybara/rspec'
require 'capybara/rails'