我正在尝试使用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测试它们的最佳方法是什么?我应该使用自定义匹配器吗?
答案 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