[英]Capybara NoMethodError: undefined method `visit' for
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
我错过了什么?
我克隆了您的存储库并运行了规范。 问题是你使用术语page
用于两个不同的东西,Capybara页面( subject { page }
)和你的模型名称Page
(你也命名page
)。 这两个名称冲突,这就是为什么rspec抱怨没有#<Page:0x00000005094bb0>
方法visit
。
要解决此问题,只需重命名您在初始let
创建的页面:
let(:mypage) { Factory.create(:page) }
这样可以通过命名页面模型mypage
而不是page
来避免冲突。
但是还有其他问题。 您的用户工厂不使用序列来分配电子邮件,因此您会收到验证错误,因为它表示电子邮件已被删除。
我将您的用户工厂更改为:
sequence(:email) { |n| "abc#{n}@example.com"}
factory :user do
email
password "foobar"
password_confirmation "foobar"
...
这修复了验证错误,但现在又出现了另一个错误。 在第一个规范的行中,您应该检查类 Page
上的count
是否没有变化,而不是记录 page
(或mypage
)。
所以改为:
expect { click_button "Create Page" }.not_to change(Page, :count)
这仍然会给您带来错误,因为您还没有对PagesController
进行任何create
操作。 从您所写的内容来看,信息似乎无效,因此它甚至不应该采取这种行动。 我不知道你到底想要做什么,所以我会留下剩下的让你弄清楚。
如果您最近升级到Capybara 2.0并且您的集成测试与以前版本的Capybara一起使用,您可以尝试将请求目录重命名为功能。 查看http://www.codelearn.org/blog/how-to-make-old-integration-tests-work-with-capybara-2-0
将以下内容添加到spec/spec_helper.rb
(在Spork.prefork
块中):
require 'capybara/rspec'
require 'capybara/rails'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.