用玩笑来测试Pickadate

时间:2020-10-28 06:04:15

标签: javascript ruby-on-rails capybara pickadate luxon

在Rails项目中,我们使用pickadate v3.6.2提供了日期选择器。测试已经进行了一段时间,但是最近从moment.js移至luxon.js时,一些功能规格失败了。 IRL,功能正常。我认为这与我们如何设置日期输入有关。我正在尝试使用正确的功能来驱动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)。

1 个答案:

答案 0 :(得分:0)

尽管更好的解决方案是构建一些与日期选择器交互的代码(就像普通用户一样,如@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