水豚找不到 simple_form 字段与集合
capybara cant find simple_form field with collection
我有 simple_form 个带字段的表单
<%= simple_form_for(@menu) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">enter code here
<%= f.input :order_date, :input_html => { :value => Time.now.strftime("%A") } %>
<%= f.input :title %>
<%= f.input :dish_category, input_html: {id: "dish_category"}, as: :radio_buttons, collection: ["First course", "Main course", "Drink"] %>
<%= f.input :description %>
<%= f.input :price %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
而且效果很好。但是当我用水豚测试它时,它给了我一个错误:
失败:
1) Lunches Admin create menu lunches admin can create new menu only for today
Failure/Error: fill_in 'Dish category', :with => 'First course'
Capybara::ElementNotFound:
Unable to find field "Dish category"
自测:
scenario "lunches admin can create new menu only for today" do
admin = FactoryGirl.create(:lunches_admin)
login_as(admin)
visit new_menu_path
fill_in "Order date", :with => Time.now.strftime("%A")
fill_in "Title", :with => "Borsh"
fill_in "Description", :with => "Mmm, yamy"
fill_in "Price", :with => 99.99
fill_in 'Dish category', :wit`enter code here`h => 'First course'
click_button 'Create Menu'
expect(page).to have_content "Menu was successfully created."
end
HTML本身:(我还得再写点东西,因为程序说代码太多,字数不够)
<form novalidate="novalidate" class="simple_form new_menu" id="new_menu" action="/menus" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="Dgh1T4kP0h/bqnXo6blYSu8lBPLwbM/3XD8sKVijc61YTYPmjVlwdHFfPZuaqwARambyChdOVstRQuO6WmgPbQ==" />
<div class="form-inputs">
<div class="form-group string optional menu_order_date"><label class="string optional control-label" for="menu_order_date">Order date</label><input value="Friday" class="string optional form-control" type="text" name="menu[order_date]" id="menu_order_date" /></div>
<div class="form-group string required menu_title"><label class="string required control-label" for="menu_title"><abbr title="required">*</abbr> Title</label><input class="string required form-control" type="text" name="menu[title]" id="menu_title" /></div>
<div class="form-group radio_buttons required menu_dish_category"><label class="radio_buttons required control-label" for="dish_category"><abbr title="required">*</abbr> Dish category</label><span class="radio"><label for="menu_dish_category_first_course"><input id="dish_category" class="radio_buttons required" type="radio" value="First course" name="menu[dish_category]" />First course</label></span><span class="radio"><label for="menu_dish_category_main_course"><input id="dish_category" class="radio_buttons required" type="radio" value="Main course" name="menu[dish_category]" />Main course</label></span><span class="radio"><label for="menu_dish_category_drink"><input id="dish_category" class="radio_buttons required" type="radio" value="Drink" name="menu[dish_category]" />Drink</label></span></div>
<div class="form-group text required menu_description"><label class="text required control-label" for="menu_description"><abbr title="required">*</abbr> Description</label><textarea class="text required form-control" name="menu[description]" id="menu_description">
</textarea></div>
<div class="form-group decimal required menu_price"><label class="decimal required control-label" for="menu_price"><abbr title="required">*</abbr> Price</label><input class="numeric decimal required form-control" type="number" step="any" name="menu[price]" id="menu_price" /></div>
</div>
<div class="form-actions">
<input type="submit" name="commit" value="Create Menu" class="btn btn-default" />
</div>
</form>
由于 dish_category
是一个单选按钮,您需要使用另一个水豚选择器才能与之交互。
变化
fill_in 'Dish category', :with => 'First course'
至:
choose('First course')
这应该可以解决问题。
您可以在此处阅读有关表单的水豚选择器的更多信息:https://github.com/jnicklas/capybara#interacting-with-forms
我有 simple_form 个带字段的表单
<%= simple_form_for(@menu) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">enter code here
<%= f.input :order_date, :input_html => { :value => Time.now.strftime("%A") } %>
<%= f.input :title %>
<%= f.input :dish_category, input_html: {id: "dish_category"}, as: :radio_buttons, collection: ["First course", "Main course", "Drink"] %>
<%= f.input :description %>
<%= f.input :price %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
而且效果很好。但是当我用水豚测试它时,它给了我一个错误: 失败:
1) Lunches Admin create menu lunches admin can create new menu only for today
Failure/Error: fill_in 'Dish category', :with => 'First course'
Capybara::ElementNotFound:
Unable to find field "Dish category"
自测:
scenario "lunches admin can create new menu only for today" do
admin = FactoryGirl.create(:lunches_admin)
login_as(admin)
visit new_menu_path
fill_in "Order date", :with => Time.now.strftime("%A")
fill_in "Title", :with => "Borsh"
fill_in "Description", :with => "Mmm, yamy"
fill_in "Price", :with => 99.99
fill_in 'Dish category', :wit`enter code here`h => 'First course'
click_button 'Create Menu'
expect(page).to have_content "Menu was successfully created."
end
HTML本身:(我还得再写点东西,因为程序说代码太多,字数不够)
<form novalidate="novalidate" class="simple_form new_menu" id="new_menu" action="/menus" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="Dgh1T4kP0h/bqnXo6blYSu8lBPLwbM/3XD8sKVijc61YTYPmjVlwdHFfPZuaqwARambyChdOVstRQuO6WmgPbQ==" />
<div class="form-inputs">
<div class="form-group string optional menu_order_date"><label class="string optional control-label" for="menu_order_date">Order date</label><input value="Friday" class="string optional form-control" type="text" name="menu[order_date]" id="menu_order_date" /></div>
<div class="form-group string required menu_title"><label class="string required control-label" for="menu_title"><abbr title="required">*</abbr> Title</label><input class="string required form-control" type="text" name="menu[title]" id="menu_title" /></div>
<div class="form-group radio_buttons required menu_dish_category"><label class="radio_buttons required control-label" for="dish_category"><abbr title="required">*</abbr> Dish category</label><span class="radio"><label for="menu_dish_category_first_course"><input id="dish_category" class="radio_buttons required" type="radio" value="First course" name="menu[dish_category]" />First course</label></span><span class="radio"><label for="menu_dish_category_main_course"><input id="dish_category" class="radio_buttons required" type="radio" value="Main course" name="menu[dish_category]" />Main course</label></span><span class="radio"><label for="menu_dish_category_drink"><input id="dish_category" class="radio_buttons required" type="radio" value="Drink" name="menu[dish_category]" />Drink</label></span></div>
<div class="form-group text required menu_description"><label class="text required control-label" for="menu_description"><abbr title="required">*</abbr> Description</label><textarea class="text required form-control" name="menu[description]" id="menu_description">
</textarea></div>
<div class="form-group decimal required menu_price"><label class="decimal required control-label" for="menu_price"><abbr title="required">*</abbr> Price</label><input class="numeric decimal required form-control" type="number" step="any" name="menu[price]" id="menu_price" /></div>
</div>
<div class="form-actions">
<input type="submit" name="commit" value="Create Menu" class="btn btn-default" />
</div>
</form>
由于 dish_category
是一个单选按钮,您需要使用另一个水豚选择器才能与之交互。
变化
fill_in 'Dish category', :with => 'First course'
至:
choose('First course')
这应该可以解决问题。
您可以在此处阅读有关表单的水豚选择器的更多信息:https://github.com/jnicklas/capybara#interacting-with-forms