使用RSpec测试哈希数组的最佳方法是什么?

时间:2017-05-08 16:45:52

标签: ruby-on-rails ruby rspec

我正在尝试使用RSpec测试哈希数组,但我不知道如何测试它们,因为哈希顺序可能会改变。 E.G:

[{name: 'John', age: 40, country: {abrev: 'US', name: 'United States'}}, {name: 'Peter', age: 43, country: {abrev: 'US', name: 'United States'}}]

与:

相同
[{name: 'Peter', age: 43, country: {abrev: 'US', name: 'United States'}}, {name: 'John', age: 40, country: {abrev: 'US', name: 'United States'}}]

使用RSpec测试它们的最佳方法是什么?我应该使用自定义匹配器吗?

2 个答案:

答案 0 :(得分:3)

您可以使用RSpec的contain_exactly匹配器,它不关心订购。

expect(collection).to contain_exactly(
  {name: 'John', age: 40, country: {abrev: 'US', name: 'United States'}},
  {name: 'Peter', age: 43, country: {abrev: 'US', name: 'United States'}}
)

另一种选择是使用match_array,其行为类似(顺序并不重要),但预期的参数是一个数组,而不是单个元素。

expect(collection).to match_array([
  {name: 'John', age: 40, country: {abrev: 'US', name: 'United States'}},
  {name: 'Peter', age: 43, country: {abrev: 'US', name: 'United States'}}
])

答案 1 :(得分:2)

要测试没有顺序的数组相等性,可以使用:

foo.should =~ bar

或者:

cmd