首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在凯巴拉如何连锁/复合匹配?

在凯巴拉如何连锁/复合匹配?
EN

Stack Overflow用户
提问于 2016-04-15 19:19:15
回答 1查看 376关注 0票数 2

我试图断言所有结果是值A还是值b。我的设置如下:

代码语言:javascript
复制
def results 
 all('.results li')
end

def apply_filter(filter)
   filter_by(filter)
end

def have_product_type(type)
  have_selector('.type', text: type)
end

现在,我需要断言所有的结果要么是A型,要么是B型。

我想做这样的事:

代码语言:javascript
复制
apply_filter('A')
apply_filter('B')
expect(results).to all(have_product_type('A').or have_product_type('B'))

别以为在水豚里还不支持复式匹配。它一次只适用于一个断言。例如,这起作用是:

代码语言:javascript
复制
expect(results).to all(have_product_type('A'))

我也尝试了正常的RSpec匹配,但后来水豚链不适合它。

例如,这也不起作用,因为这些方法是通过config.include包含在特性规范中的助手方法。当have_product_type方法位于全局命名空间时,我会得到未定义的方法错误。

代码语言:javascript
复制
expect(results.all {|result| result.have_product_type('A') or result.have_product_type('B')}.to be_truthy

我如何测试这两种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-15 20:34:54

在Capybara支持复合匹配,只要您在Capybaras matchers之前确保“rspec/ ensure”是必需的。有一点要注意的是,在你的例子中

代码语言:javascript
复制
expect(results).to all(have_product_type('A').or have_product_type('B'))

卡比巴拉的等待行为可能会使你的这部分测试非常缓慢。这可能是因为have_product_type( 'A‘)会等到Capybara.default_max_wait_time秒后,结果中的每个元素都会出现匹配的’A‘元素,所以如果大多数元素实际上与'B’匹配,则延迟可能很长。在这种情况下,您可能想要检查页面上的更改,该更改指示已应用了筛选器,然后将wait: false传递给预期中使用的have_selector匹配器(或在using_wait_time(0){ expect ... }块中执行期望)。

注意:您也可以使用regex版本的:text选项来实现您想要实现的内容,如下所示

代码语言:javascript
复制
expect(results).to all(have_product_type(/^(A|B)$/'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36655274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档