Jor*_*Ell 12 ruby arrays rspec ruby-on-rails
我有一个充满对象的json数组.
my_array = [{id => 6, name => "bob"},
{id => 5, name => "jim"},
{id => 2, name => "steve"}]
Run Code Online (Sandbox Code Playgroud)
我需要查看数组是否包含一个包含属性"id"的对象,该属性设置为5."name"属性未知.
我如何在rspec中执行此操作?
我知道如果我知道我可以做的名字属性:
my_array.should include({:id => 5, :name => "jim"})
Run Code Online (Sandbox Code Playgroud)
Sim*_*tti 24
expect(myArray.find { |item| item[:id] == 5 }).to_not be_nil
Run Code Online (Sandbox Code Playgroud)
或者使用遗留应该的语法
myArray.find { |item| item[:id] == 5 }.should_not be_nil
Run Code Online (Sandbox Code Playgroud)
请注意,这myArray不符合Ruby约定.变量使用下划线
my_array
Run Code Online (Sandbox Code Playgroud)
不是camelcase
myArray
Run Code Online (Sandbox Code Playgroud)
小智 20
也可以使用 having_attributes 别名:
expect(my_array).to include( an_object_having_attributes(id: 5) )
Run Code Online (Sandbox Code Playgroud)
或者,在我自己的用例中,匹配整个数组:
expect(my_array).to contain_exactly(
an_object_having_attributes(id: 5),
an_object_having_attributes(id: 6),
an_object_having_attributes(id: 2)
)
Run Code Online (Sandbox Code Playgroud)
您可以展开一个数组并检查两个数组的匹配,如下所示:
expect(my_array).to include(*compare_array)
Run Code Online (Sandbox Code Playgroud)
它将展开并匹配数组的每个值。
它相当于这样:
expected([1, 3, 7]).to include(1,3,7)
Run Code Online (Sandbox Code Playgroud)
来源:Relish 文档
| 归档时间: |
|
| 查看次数: |
11396 次 |
| 最近记录: |