Tôi tìm thấy một giải pháp sạch cho rspec và Capybara để kiểm tra sử dụng ngày tháng và thời gian chọn phương pháp, nơi trong HTML của bạn, bạn sử dụng một datetime chọn hoặc ngày chọn. Điều này làm việc với Rails 4, RSpec 3.1 và Capybara 2.4.4.
Say ở dạng HTML của bạn, bạn có sau đây:
<%= f.datetime_select(:start_date, {default: DateTime.now, prompt: {day: 'Choose day', month: "Choose month", year: "Choose year"}}, {class: "date-select"}) %>
các DateTime Chọn Xem helper sẽ tạo ra 5 lựa chọn các lĩnh vực với id như id="modelname_start_date_1i"
, nơi id được nối với 1i, 2i, 3i, 4i, 5i. Theo mặc định Năm, Tháng, Ngày, Giờ, Phút. Nếu bạn thay đổi thứ tự của các trường, hãy đảm bảo thay đổi trình trợ giúp tính năng bên dưới.
1) Tạo một Helper Tính năng cho ngày tháng và thời gian giúp đỡ
đặc tả/support/giúp đỡ/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
Lưu ý rằng cho ngày tôi sử dụng %-d
cung cấp cho bạn một tổ chức phi giá trị số có sẵn (ví dụ 4) thay vì %d
có giá trị số không có đệm (ví dụ 04). Kiểm tra the date formats with strftime
2) Sau đó, bạn cần đưa các phương thức ngày và giờ của bạn vào spec/support/helpers.rb để bạn có thể sử dụng chúng trong bất kỳ tệp thông số nào.
require 'support/helpers/date_time_select_helpers'
RSpec.configure do |config|
config.include Features::DateTimeSelectHelpers, type: :feature
end
3) Trong tệp Spec, bạn có thể gọi người trợ giúp. Ví dụ:
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
Nó không hoạt động. Tôi gặp lỗi: Lỗi/lỗi: chọn '2011/07/18',: từ => 'Ngày sinh' Capybara :: ElementNotFound: không thể chọn tùy chọn, không có tùy chọn với văn bản '2011/07/18' trong hộp chọn 'Ngày sinh' Nhân tiện, Rails tạo 3 hộp chọn cho mỗi phần ngày. –
Sau đó, bạn cần phải chọn 3 tùy chọn từ 3 hộp chọn và sử dụng các giá trị giống như bạn thấy trên trang. – solnic
Cảm ơn rất nhiều! Bây giờ nó hoạt động! –