2017-02-23 68 views
1

我正在爲RSpec測試編寫視圖並在嘗試填寫文本字段時出現以下錯誤。編寫RSpec時出錯測試Capybara :: ElementNotFound:無法找到字段

1) coordinators/new.html.erb populate page name text entry field filled checks for presence of filled in text field 
Failure/Error: fill_in "coordinator_name", with: 'JoeJoe' 

Capybara::ElementNotFound: 
    Unable to find field "coordinator_name" 
# ./spec/views/coordinators/new.html.erb_spec.rb:47:in `block (4 levels) in <top (required)>' 

這裏是我的代碼的一部分,包括前面的測試,其中字段「coordinator_name」被發現。我很困惑,爲什麼它沒有在第二次測試中找到?

describe 'name text entry field' do 
    it 'checks for presence of empty text field for name' do 
    expect(rendered).to have_field('coordinator_name', text: nil) 
    end 
end 

describe 'name text entry field filled' do 
    it 'checks for presence of filled in text field' do 
    fill_in "coordinator_name", with: 'JoeJoe' 
    expect(rendered).to have_field('coordinator_name', text: 'JoeJoe') 
    end 
end 

有關如何找到解決方案的任何建議?

+0

您的測試代碼顯示您向have_field傳遞':text'選項 - 如果您嘗試測試字段的值,則has_field不會採用':text'選項,它需要':with'選項,什麼是「呈現」? - 沒關係,我明白你做錯了什麼。 –

+0

@KevinEtore它是一個空文件(無html)。但同樣的事情發生時(空白頁),當我把save_and_open_page用於「檢查是否存在空文本字段」測試時 – JSmooth

回答

1

這裏的問題是,你正在編寫一個視圖測試 - 視圖測試可以檢查頁面上的內容,但它不能與它進行交互。在正常的設置中,水豚匹配器將包含在您的視圖規格中,但水豚:: DSL不會是 - https://github.com/teamcapybara/capybara/blob/master/lib/capybara/rspec.rb#L10 - 因此fill_in甚至不應在視圖規格中提供。我假設你通過在所有規格中包含Capybara :: DSL來覆蓋該內容?

對於你的第二個規範工作,你需要寫一個功能規範。

+0

我在spec/rails_helper.rb文件中包括了Capybara :: DSL – JSmooth

+1

@Joseph Right - 其中包含了每種規格類型 - 這是不正確的 - 只需要''capybara/spec'',DSL將只包含在功能測試中 - 這是您可以實際與頁面進行交互的地方。匹配器也將包含在視圖規範中 - 允許您檢查字段的存在,但不能更改它們。 –

相關問題