我有一个充满对象的json数组。
my_array = [{id => 6, name => "bob"},
{id => 5, name => "jim"},
{id => 2, name => "steve"}]
我需要查看数组是否包含一个包含属性“id”的对象,该属性被设置为5。“name”属性未知。
如何在RSpec中执行此操作?
我知道,如果我有名字属性,我知道我可以这样做:
my_array.should include({:id => 5, :name => "jim"})
8条答案
按热度按时间mzillmmw1#
或者使用传统的HASS语法
请注意,
myArray
不遵循Ruby约定。变量使用下划线不是卡梅尔凯斯
mv1qrgav2#
也可以使用HAVING_ATTRIBUTES别名:
或者,就像我自己的用例一样,匹配整个数组:
7lrncoxx3#
您可以展开一个数组并检查两个数组的匹配情况,如下所示:
它将展开并匹配数组的每个值。
它相当于:
来源:味觉文档
oewdyzsn4#
只有当您执行其中的许多操作时,这才是值得的,但您可以定义一个自定义匹配器:
zz2j4svz5#
将这个
any
匹配器放入spec/support/matchers.rb
中,并要求在您的spec_helper.rb
中使用然后,您可以在如下所示的示例中使用它:
bjp0bcyl6#
我会这样使用RSpec 3的可组合
include
匹配器:这样做的好处是在发生故障时通过RSpec进行更详细的输出。
这将生成以下失败消息:
进一步阅读:
https://relishapp.com/rspec/rspec-expectations/docs/composing-matchers
hivapdat7#
下面是一个客户匹配器“INCLUDE_OBJECT”(可能应该使用一个更好的名称,因为它只是检查id是否存在)
用法如下
Matcher可以处理Object、Hashs(符号或字符串),它还只打印数组中的id,以便于查看
ws51t4hk8#
我看到有许多响应,但在需要检查每个数组对象上的多个键-值对而不是单个属性检查的情况下,这里有一个实现对我很有帮助
使用情况
Matcher实现