2013-07-13 71 views
2

我使用RSpec的Capybara來檢查我的Rails項目。Rails:水豚沒有找到div元素

我正在測試表單域未正確填充時的錯誤。這裏的形式(使用HAML):

= form_tag '/objects', :class => 'objects-form' do 
    %ul 
     %li= select_tag 'object', options_for_select([['Select an object', ''], ['Car', 'CAR'], ['Keys', 'KEYS'], ['Ambrella', 'AMBRELLA']]), :id => 'select-object' 
     %li= text_field_tag :quantity, nil 
     %li= submit_tag 'Buy', :id => 'object-submit' 

發生錯誤時(在這種情況下,不選擇一個對象,但只有一個量),則顯示閃光消息(具有一個.flash錯誤類名) :

- flash.each do |type, msg| 
    = content_tag :div, msg, :class => "flash-#{type}", :id => 'flash-msg' 

所以,這裏是我的水豚測試:

it 'Should return error when no object selected' do 
    within 'form.objects-form' do 
     fill_in 'quantity', :with => '1' 
     click_button 'object-submit' 
     current_path.should == objects_path 
     save_and_open_page 
     page.should have_css 'div.flash-error' 
    end 
end 

,但我得到了下面的水豚錯誤:

Failure/Error: page.should have_css 'div.flash-error' 
    expected #has_css?("div.flash-error") to return true, got false 

打開的頁面(使用save_and_open_page)顯示相應的div錯誤消息:

div#flash-msg.flash-error 

我使用的是最新版本的水豚(因爲#2很多類似的問題,相對於舊版本的水豚)使用gem 'capybara', :git => 'https://github.com/jnicklas/capybara.git'

任何想法?預先感謝。

編輯:

更正上豚代碼鍵入錯誤,由Alex作爲檢測。

回答

0

問題是你在水豚使用的選擇器是div#flash-error,但你的div是div#flash-msg.flash-error或更簡單的div.flash-error

+0

感謝您的回覆Alex,但這是一個輸入錯誤。正如您在Capybara響應中所看到的那樣,它正確地期待'div.flash-error'(在Edit上更正)。 – htaidirt