[英]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.