ruby-on-rails - 如何使用 rspec 测试选择日期?

标签 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 

...但它说 > 无法选择选项,找不到带有 ID、名称或标签“day”的选择框

编辑:在查看页面的 HTML 输出时,我注意到 Rails 自动将 id 添加到日、月和年字段... 例如,day 的输出如下所示...

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

但话又说回来,当我这样做...

select '28', :from => :show_date_3i

...它说 >>> 无法选择选项,找不到带有 ID、名称或标签“show_date_3i”的选择框...这是为什么?

最佳答案

Rails Form Helpers 将日期选择字段分解为一组数据部分——可能将它们命名为 1i6i——它们代表年、月、日,数据时间的小时,分​​钟和秒。

对于日期,只使用年、月、日部分。

给定你的表单助手标签:

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

我建议您先了解 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 上的 capybara 匹配器文档:

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

关于ruby-on-rails - 如何使用 rspec 测试选择日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10563727/

相关文章:

testing - 将属性注入(inject)Sling Model的最佳方法是什么?

java - 从java中的sql文件将模式加载到h2中

javascript - 在 Chai 断言库中,当我们已经有了 "assert.equal()"和 "assert.deepEqual()"时, "assert.strictEqual()"有什么用?

javascript - 单击按钮通过 Ajax 请求将 Javascript 数组发送到 Rails Controller

ruby-on-rails - 检查选择框是否具有 capybara 的某些选项

ruby-on-rails - Rails 3.1 Assets 在生产中被指纹识别,但渲染的 HTML 不是

CSS :visited Not Working with AJAX Call - Ruby On Rails

javascript - ExecJS::ProgramError:尝试为生产预编译 Assets 时出现意外字符 '#'

unit-testing - 在进程中设置 "late"测试用例的最佳方法

ruby-on-rails - Rspec/Rails3 : NoMethodError: undefined method `text' for nil:NilClass