gpt4 book ai didi

ruby - 需要使用 Capybara/RSpec 计算字符串中的电子邮件数量

转载 作者:行者123 更新时间:2023-11-28 21:22:20 24 4
gpt4 key购买 nike

所以我有一个应用程序,它包含多个条目,这些条目是逗号分隔的电子邮件字符串。字符串位于可以修改的文本区域元素中。该应用程序使用 JavaScript 修改这些字符串,我需要使用 Capybara 来观察验证目标字符串中是否包含正确数量的电子邮件。为了说明我的意思,这是我的 Cucumber(假设目标列表以 5 个电子邮件字符串开头):

When I remove the 3rd email under list one
Then I should see 4 emails under list one
When I click the "Cancel" button for list one
Then I should see 5 emails under list one

我可以像这样轻松地用 Capybara 捕获绳子:

expect(page).to have_css(".css-selectors textarea")

但我不知道该怎么做。我需要能够断言字符串中的电子邮件数量实际上正在更改为所需的数量。我需要拆分字符串并计算电子邮件的数量以查看它们是否与目标数量匹配,但我尝试的所有操作都会导致竞争条件,即 Capybara 在 JS 完成更新之前检查值。我研究过将过滤器 block 传递给 have_css 调用,但我找不到关于它如何工作的文档,或者它是否是正确的策略。所以我在这里没有想法。

最佳答案

由于所有电子邮件都在一个元素中,因此您使用过滤器 block 的倾向是完全正确的。过滤器 block 接收与初始选择器匹配的每个元素,并需要返回它是否匹配您希望执行的任何额外过滤(真/假)。因此,要检查元素是否有一个字符串(值不是文本,因为它是一个表单字段)和 4 个逗号分隔的项目,它会是这样的

expect(page).to have_css(".css-selectors textarea"){ |ta|
ta.value.split(',').size == 4
}

这将使用 Capybaras 等待/重试行为,同时还执行检查元素文本中逗号分隔项的匹配数量的额外步骤,从而绕过竞争条件。

您的检查也可以通过对字段选择器的 with 选项使用正则表达式来执行,按照

expect(page).to have_field(type: 'textarea', with: /^[^,]+,[^,]+,[^,]+,[^,]+$/)

或 fillable_field 选择器

expect(page).to have_selector(:fillable_field, type: 'textarea', with: /^[^,]+,[^,]+,[^,]+,[^,]+$/)

那些目前不在 .css-selectors 元素范围内,但您可以使用 within 或链式查找来做到这一点。您还可以通过传递元素的 ID/名称/标签文本来确保元素的唯一性。显然,如果您想实际验证文本字符串是电子邮件等,您可以使正则表达式更复杂。

关于ruby - 需要使用 Capybara/RSpec 计算字符串中的电子邮件数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48531816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com