2013-07-26 50 views
2

我有以下表單,我想檢查文本字段是否存在。我怎樣才能做到這一點 ? 用水豚測試表單text_field的存在

<%= form_for(ownership, remote: true) do |f| %> 
    <div> 
    <%= f.text_field :confirm, value: nil %> 
    <%= f.hidden_field :start_date, value: Time.now %> 
    </div> 
    <%= f.submit t('button.ownership.take.confirmation'), class: "btn btn-small"%> 
<% end %> 

這裏我的測試:

describe "for not confirmed ownership" do 

    before do 
    FactoryGirl.create(:agreed_ownership, user: current_user, product: product) 
    be_signed_in_as(current_user) 
    visit current_page 
    end 

    # it { should_not have_text_field(confirm) } 
    it { should_not have_button(t('button.ownership.take.confirmation')) } 
end 

回答

4

你會使用一個has_css?期望:

it "should have the confirm input field" do 
    visit current_page 

    expect(page).to have_css('input[type="text"]') 
end 

您可以使用額外的jQuery風格的選擇來過濾輸入其他屬性領域也是如此。例如,'input[type="text"][name*="confirm"]'將選擇出現在輸入字段的name屬性中的confirm

要設定一個期望領域現在,你會使用to_not對你的期望:expect(page).to_not have_css('input[type="text"]')

獎金:這是上了年紀,should式的語法:

it "should have the confirm input field" do 
    visit current_page 

    page.should have_css('input[type="text"]') 
end 

it "shouldn't have the confirm input field" do 
    visit current_page 

    page.should_not have_css('input[type="text"]') 
end 
+0

非常感謝你 !你能幫我填補這個領域嗎?我可以做一些類似'fill_in'input [type =「text」] [name =「confirm」]'的東西,用:「Something」'? –

+0

要用['fill_in']填充字段(http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Actions#fill_in-instance_method),您需要使用「locator」,它是一個字符串Capybara檢查字段的「label」文本,「name」屬性和「id」屬性。如果你不想使用任何這些屬性,你也可以做類似'find('input [type =「text」] [name =「confirm」]').set(「Something」)',但是我不是一個很大的粉絲,因爲這種語法與你的用戶如何體驗/使用你的應用程序相差甚遠,這是使用Capybara的目的。 –

+0

好吧,我試過,但它沒有奏效:'水豚:: ElementNotFound:找不到css「輸入[type = \」text \「] [name = \」confirm \「]」' –