首页 > 解决方案 > 用玩笑测试pickadate

问题描述

在 Rails 项目中,我们有一个使用pickadatev3.6.2 的日期选择器。测试已经工作了一段时间,但最近从一些功能规范转移到失败moment.jsluxon.jsIRL,该功能工作正常。我认为这是关于我们如何设置日期输入。我正在尝试获得正确的功能来驱动capybara设置日期输入。

日期输入位于已初始化的表单元素中

$("#the_date_input").pickadate()

一个消费脚本的工作原理(IRL)如下:

const startDateField = this.element.find(this.opts.the_date_inputs_field);
const datePicker = startDateField.pickadate('picker');
if (datePicker) {
  // this logs the correct value in the browser console
  console.log(datePicker.get('select', 'yyyy-mm-dd'));
  ...
}

浏览器中的日期格式看起来像12, October, 2020- 长的可呈现日期格式。

我们的capybara代码尝试设置值Rails默认to_date字符串格式,我认为是YYYY-MM-DD.

  page.execute_script("$('#the_date_input').val('#{start_date.to_date}');")

我需要格式化val为长英文日期字符串吗?或者有没有更好的方法pickadate在这些测试中注入值或设置值(使用 JS)。

标签: javascriptruby-on-railscapybarapickadateluxon

解决方案


尽管更好的解决方案是构建一些代码来与日期选择器交互(就像普通用户 - 正如上面提到的@Thomas Walpole),但以编程方式与日期选择器模式交互是很棘手的。

我找到了一个解决方案——也许并不理想——但您可以使用该pickadate select方法来指定日期。这贯穿pickdate代码以正确设置输入值以及引擎盖下发生的任何其他事情。

这是我的水豚辅助方法:

def set_pickadate_date(pickadate_selector, date)
  page.execute_script("$('#{pickadate_selector}').pickadate('picker').set('select', [#{date.year}, #{date.month - 1}, #{date.day}]);")
end

我通过pickadate文档找到了这个:https ://amsul.ca/pickadate.js/api/#method-set-select


推荐阅读