【问题标题】:Trigger @change of v-text-field in Capybara test在 Capybara 测试中触发 v-text-field 的 @change
【发布时间】:2018-02-03 15:42:38
【问题描述】:

我有这个规格:

checklist_item_element.fill_in 'description', with: 'Changed description'
page.find('body').click # to blur the input field
checklist_item.reload
expect(checklist_item.description).to eq('Changed description')

我有这个模板:

v-text-field.habit-card__habit-checklist__checklist-item-description(
    name="description"
    v-model="checklistItem.description"
    data-vv-name="description"
    @change="saveChecklistItem(checklistItem)"
)

我正在使用 Selenium 的 webkit 驱动程序。最后一个expect 总是失败,因为description 仍然是旧值而不是Changed description

如果我自己使用 Chrome 浏览器执行相同的操作,它绝对可以正常工作。

我猜@change 没有被触发。我是对的,如果是的话,我能做些什么来实现它?

【问题讨论】:

  • 如果你在click 之后睡了几秒钟,那么测试是否通过了?
  • @ThomasWalpole 抱歉,我没有尝试过。我现在已经按照接受的答案中的描述更改了我的规范。

标签: rspec capybara-webkit vuetify.js


【解决方案1】:

由浏览器操作(fill_inclick 等)触发的任何操作通常不会在这些方法返回时完成,因为 Capybara 并且驱动程序无法知道哪些操作会或不会触发页面上的进一步操作,以及触发的这些操作是否与测试人员正在做的任何事情相关。这就是为什么所有 Capybaras 查找器/匹配器都有内置的等待/重试行为,以便与页面中发生的更改同步。这也是为什么在特性测试中进行直接数据库检查通常是一种不好的代码味道的部分原因,因为它没有提供任何与页面同步的方法。

如果您确实需要(或坚持进行)直接数据库检查,那么您需要在它们之前(在触发它们的浏览器操作之后)对任何视觉页面更改向用户表明该操作已完成提出期望。如果没有视觉页面更改(通常表明用户体验不佳),那么您真正能做的就是休眠一段时间(或可能使用提供通用等待规范匹配器(waiting_rspec_matchers 等)的 gem 之一)。

【讨论】:

  • 你是对的。如果检查模型本身,我更改了规范以检查现有的成功通知。
猜你喜欢
  • 2019-03-05
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
相关资源
最近更新 更多