我正在为我的应用程序使用bootstrap-datepicker-rails gem,并创建了一个表单,用户可以在其中选择开始日期和结束日期。
当用户编辑表单时,我希望他们能够看到他们之前选择的日期。 (例如,开始日期:2015年10月31日,结束日期:2015年11月15日)。
我正在尝试编写测试以确保我的应用可以执行此操作,但我仍然坚持使用语法。
user_updates_project_spec.rb
require "rails_helper"
feature "User updates project" do
before (:each) do
@user = create(:user)
login_as(@user, scope: :user)
@project = create(:project, creator: @user,
name: "Building a robot",
start_at: "2015-10-31",
end_at: "2015-11-15", )
end
scenario "and sees correct dates on form" do
visit edit_user_project_path(@user, @project)
expect(".datepicker").to have_content("October 31, 2015")
end
end
我得到的错误是:
Failure/Error: expect(".datepicker").to have_content("October 31, 2015")
expected to find text "October 31, 2015" in ".datepicker"
这就是我的表格:
<div class="col-sm-6 pl0">
<%= f.input :start_at, label: "Start Date", as: :string,
input_html: {value:@project.set_start_date_for_form.to_s(:long),
class: "datepicker start-date"} %>
</div>
<div class="col-sm-6 pr0">
<%= f.input :end_at, label: "End Date", as: :string,
input_html: {value: @project.set_end_date_for_form.to_s(:long),
class: "datepicker end-date"} %>
</div>
关于它为什么不起作用的任何想法?
答案 0 :(得分:0)
你写下你期望的方式,你真正说的是期待字符串&#34; .datepicker&#34;有内容&#34; 2015年10月31日&#34;这永远不会成真。 expect需要采用一个可以运行has_content匹配器而不是字符串的元素。你可以像这样重写它
expect(page.find(:css, '.datepicker.start-date')).to have_content("October 31, 2015")
虽然更好的方法可能是使用
expect(page).to have_css('.datepicker', text: 'October 31, 2015)
因为如果内容正在改变或通过ajax加载,那将匹配。 还有一点需要注意的是,既然你正在使用一个日期选择器小部件,你可能实际上需要查看JS在真实浏览器中生成的html,而不是查看tempalte中的html,以确定哪个你需要检查里面的内容。
答案 1 :(得分:0)
我想.start-date
和.end-date
可能会让您感到困惑,您也可以使用.text
属性来检查它们:
expect(page.find(:css, '.datepicker.start-date').text).to eq('October 31, 2015')
expect(page.find(:css, '.datepicker.end-date').text).to eq('November 15, 2015')
如果失败,您可以打印该值进行调试:
puts page.find(:css, '.datepicker.start-date').text
答案 2 :(得分:0)
事实证明,在测试时我没有检查正确的元素。
解决了什么问题:
expect(page).to have_css("#project_start_at[value='October 31, 2015']")
expect(page).to have_css("#project_end_at[value='November 15, 2015']")
该datepicker集的元素ID是project_start_at和project_end_at。