Я нашел чистое решение для тестирования 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 Select View создаст 5 полей выбора сидентификаторы, такие как id="modelname_start_date_1i"
, где к идентификатору добавляется 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).Проверьте форматы даты с помощью strftime
2) Затем вам нужно включить ваши вспомогательные методы даты и времени в spec / support / helpers.rb , чтобы вы могли использовать ихв любом spec-файле.
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