首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找检查要包含在数组中的值的rspec匹配程序

查找检查要包含在数组中的值的rspec匹配程序
EN

Stack Overflow用户
提问于 2017-05-08 09:36:09
回答 2查看 1.9K关注 0票数 1

我怎么写这个:

给定数组b = ['one', 'two', 'three'] 我希望值a包含在数组b中。

我希望与all匹配器一起使用它,所以我的最后代码如下所示:

代码语言:javascript
运行
复制
b = ['one', 'two', 'three']
my_list = [ {'type' => 'one'}, {'type' => 'two'}, {'type' => 'three'} ]
expect(my_list).to all(include("type" => a_value_included_in(b))

它正在测试以下方面:

来自my_list的所有散列必须具有一个值位于数组b中的type键。

在Rspec有这样的内置匹配器吗?

除了使用明显的反向方法之外,如何检查数组中包含的值:expect([1, 2, 3]).to include(value),在我的示例中,它实际上并不适合?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-08 09:45:57

如果要检查,来自b的每个字符串是否都存在于my_list的任何散列中

代码语言:javascript
运行
复制
b = ['one', 'two', 'three']
my_list = [ {'type' => 'one'}, {'type' => 'two'}, {'type' => 'three'} ]
b.each do |str|
  expect(my_list.find { |h| h['type'] == str }).to be_present
end

或者,你可以和:

代码语言:javascript
运行
复制
expect(my_list.map { |h| h['type'] }.sort) to eq(b.sort)

因此,当有人添加my_list << { 'type' => 'not_in_list' }时,规范将失败。

代码语言:javascript
运行
复制
expect(my_list.map { |h| b.include?(h['type']) }.uniq).to eq(true)
票数 0
EN

Stack Overflow用户

发布于 2017-05-08 11:23:12

在您的情况下,我只需使用(元素的顺序并不重要):

代码语言:javascript
运行
复制
expect(my_list).to match_array(b.map{|v| { 'type' =>  v })

或者使用include匹配器而不是match_array,如果b可以作为my_list的子集接受。

我不认为有这种情况的特殊匹配者和/或它是真正需要的。尽管如此,如果您真的不能使用w/o,您可以创建一个自定义的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43844310

复制
相关文章

相似问题

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