我發現RSpec的和水豚一個乾淨的解決方案使用日期和時間選擇的方法,凡在你的HTML您使用日期時間選擇或選擇日期進行測試。這適用於Rails 4,RSpec 3.1和Capybara 2.4.4。
說,在你的HTML表格,您有以下:
<%= f.datetime_select(:start_date, {default: DateTime.now, prompt: {day: 'Choose day', month: "Choose month", year: "Choose year"}}, {class: "date-select"}) %>
日期時間選擇視圖助手將創建5個選擇字段與IDS如id="modelname_start_date_1i"
,其中ID的後面附加1I,2I,3I, 4i,5i。默認情況下爲年,月,日,小時,分鐘。如果您更改字段的順序,請確保在下面更改功能助手。
1)創建日期和時間的助手
規格/支持/傭工功能助手/ date_time_select_helpers.rb
module Features
module DateTimeSelectHelpers
def select_date_and_time(date, options = {})
field = options[:from]
select date.strftime('%Y'), :from => "#{field}_1i" #year
select date.strftime('%B'), :from => "#{field}_2i" #month
select date.strftime('%-d'), :from => "#{field}_3i" #day
select date.strftime('%H'), :from => "#{field}_4i" #hour
select date.strftime('%M'), :from => "#{field}_5i" #minute
end
def select_date(date, options = {})
field = options[:from]
select date.strftime('%Y'), :from => "#{field}_1i" #year
select date.strftime('%B'), :from => "#{field}_2i" #month
select date.strftime('%-d'), :from => "#{field}_3i" #day
end
end
end
注意,一天我用%-d
,給你一個非-padded數值(即4),而不是%d
,它有一個零填充數值(即04)。檢查the date formats with strftime
2)然後,您需要在規格/支持/ helpers.rb您的日期和時間的助手方法,所以你可以在任何spec文件中使用它們。
require 'support/helpers/date_time_select_helpers'
RSpec.configure do |config|
config.include Features::DateTimeSelectHelpers, type: :feature
end
3)在你的規格文件中,你可以打電話給你的幫手。例如:
feature 'New Post' do
scenario 'Add a post' do
visit new_post_path
fill_in "post[name]", with: "My post"
select_date_and_time(2.days.from_now, from:"post_start_date")
click_button "Submit"
expect(page).to have_content "Your post was successfully saved"
end
end
它不起作用。我得到錯誤: 失敗/錯誤:選擇'2011/07/18',:from =>'出生日期' 水豚:: ElementNotFound: 無法選擇選項,沒有選項與文本'2011/07/18'在選擇框'出生日期' 順便說一下,Rails爲每個日期部分生成3個選擇框。 –
然後,您需要從3個選擇框中選擇3個選項,並使用與您在頁面上看到的相同的值。 – solnic
非常感謝!現在它工作了! –