Capybara NoMethodError:未定义的方法`visit'for

its*_*lay 2 rspec ruby-on-rails capybara

谢谢你的回复.
我在应用程序Git应用程序中收到错误错误

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
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Chr*_*erg 10

我克隆了您的存储库并运行了规范.问题是你使用的术语page是两个不同的东西,Capybara页面(subject { page })和你的模型名称Page(你也命名page).这两个名字冲突,这就是为什么rspec抱怨没有方法visit的原因#<Page:0x00000005094bb0>.

要解决此问题,只需重命名您在初始中创建的页面let:

let(:mypage) { Factory.create(:page) }
Run Code Online (Sandbox Code Playgroud)

这将通过命名您的页面模型mypage而不是命名来避免冲突page.

但是还有其他问题.您的用户工厂不使用序列来分配电子邮件,因此您会收到验证错误,因为它表示电子邮件已被删除.

我将您的用户工厂更改为:

sequence(:email) { |n| "abc#{n}@example.com"}
factory :user do
  email
  password "foobar"
  password_confirmation "foobar"
  ...
Run Code Online (Sandbox Code Playgroud)

这修复了验证错误,但现在又出现了另一个错误.在第一个规范的行中,您应该检查count 上没有变化Page,而不是记录 page(或mypage).

所以改为:

expect { click_button "Create Page" }.not_to change(Page, :count)
Run Code Online (Sandbox Code Playgroud)

仍然会给你留下错误,因为你也没有任何create行动PagesController.从您所写的内容来看,信息似乎无效,因此它甚至不应该采取这种行动.我不知道你到底想要做什么,所以我会留下其余的让你弄明白.


Poc*_*cha 6

如果您最近升级到Capybara 2.0并且您的集成测试与以前版本的Capybara一起使用,您可以尝试将请求目录重命名为功能.查看http://www.codelearn.org/blog/how-to-make-old-integration-tests-work-with-capybara-2-0