簡體   English   中英

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

[英]Capybara NoMethodError: undefined method `visit' for

謝謝你的回復。
我在應用程序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

我錯過了什么?

我克隆了您的存儲庫並運行了規范。 問題是你使用術語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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM