如何使用rspec测试选择日期?

时间:2012-05-12 12:27:20

标签: ruby-on-rails testing

如何使用集成rspec测试来测试以下代码(我也使用capybara)?

 1 <%= form_for [@project, @task] do |f| %>

 17   <p>
 18     <%= f.date_select(:target_date,
 19                       :default => Date.today,         
 20                       :order => [:day, :month, :year], :start_year => Date.today.year, 
 21                       :end_year => Date.today.year + 3) %>
 22   </p>                
 23 
 24   <%= f.submit %>
 25 
 26 <% end %>

到目前为止,我有以下代码......

select '28', :from => :day 

...但它说&gt; 无法选择选项,没有包含ID,名称或标签“发现日期”的选择框

编辑:在查看页面的HTML输出后,我注意到Rails会自动将id添加到日,月和年字段...... 例如,今天的输出看起来像这样......

<select id="show_date_3i" name="show[date(3i)]"><option value="1">1</option>

但是当我这样做时......

select '28', :from => :show_date_3i

...它说&gt;&gt;&gt; 无法选择选项,找不到包含ID,名称或标签'show_date_3i'的选择框 ...为什么会这样?

2 个答案:

答案 0 :(得分:3)

Rails表单助手将日期选择字段分解为一组数据部分 - 可能将它们从1i命名为6i - 它们代表年,月,日,小时,分钟和秒数据时间。

对于日期,仅使用年,月和日期的作品。

所以给出你的表单助手标签:

 <%= f.date_select(:target_date,
                    :default => Date.today,         
                    :order => [:day, :month, :year], :start_year => Date.today.year, 
                    :end_year => Date.today.year + 3)
%>

我建议您首先了解exaclty如何在选择框中呈现html日期,然后使用capybara匹配器来选择它们。

因此,例如,如果你的日期选择是'2011/01/01'而你的选择是'显示日期',你会写:

select '2011/01/01', :from => 'Show Date'

请参阅此相关问题:

How to select date from a select box using Capybara in Rails 3?

水豚在ruby-doc.info:

匹配文档

http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers

答案 1 :(得分:1)

试试这个

select '28', :from => 'task[target_date]'

或给出一些特殊的id

<%= f.date_select(:target_date,
                :default => Date.today,         
                :order => [:day, :month, :year], 
                :start_year => Date.today.year, 
                :end_year => Date.today.year + 3,
                :id => 'task_target_date') %>

然后尝试

select '28', :from => 'task_target_date'