我怎么写这个:
给定数组
b = ['one', 'two', 'three']我希望值a包含在数组b中。
我希望与all匹配器一起使用它,所以我的最后代码如下所示:
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),在我的示例中,它实际上并不适合?
发布于 2017-05-08 09:45:57
如果要检查,来自b的每个字符串是否都存在于my_list的任何散列中
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或者,你可以和:
expect(my_list.map { |h| h['type'] }.sort) to eq(b.sort)因此,当有人添加
my_list << { 'type' => 'not_in_list' }时,规范将失败。
expect(my_list.map { |h| b.include?(h['type']) }.uniq).to eq(true)发布于 2017-05-08 11:23:12
在您的情况下,我只需使用(元素的顺序并不重要):
expect(my_list).to match_array(b.map{|v| { 'type' => v })或者使用include匹配器而不是match_array,如果b可以作为my_list的子集接受。
我不认为有这种情况的特殊匹配者和/或它是真正需要的。尽管如此,如果您真的不能使用w/o,您可以创建一个自定义的。
https://stackoverflow.com/questions/43844310
复制相似问题