我为 rspec 和 capybara 找到了一个干净的解决方案,可以使用日期和时间选择方法进行测试,在您的 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"}) %>
DateTime 选择视图助手将创建 5 个带有 id 的选择字段,例如 id="modelname_start_date_1i",其中 id 附加了 1i、2i、3i、4i、5i。默认情况下,年、月、日、小时、分钟。如果您更改字段的顺序,请务必更改下面的功能助手。
1) 为日期和时间助手创建功能助手
spec/support/helpers/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 为您提供未填充的数值(即4)而不是%d 具有零填充的数值(即04)。检查the date formats with strftime
2) 然后您需要在 spec/support/helpers.rb 中包含您的日期和时间辅助方法,以便您可以在任何规范文件中使用它们。
require 'support/helpers/date_time_select_helpers'
RSpec.configure do |config|
config.include Features::DateTimeSelectHelpers, type: :feature
end
3) 在您的 Spec 文件中,您可以调用您的助手。例如:
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