我经常想比较数组,确保它们以任何顺序包含相同的元素.在RSpec中有没有一种简洁的方法可以做到这一点?

以下是不可接受的方法:

#设置

例如:

expect(array.to_set).to eq another_array.to_set

array.to_set.should == another_array.to_set

当数组包含重复项时,此操作失败.

#s或t

例如:

expect(array.s或t).to eq another_array.s或t

array.s或t.should == another_array.s或t

当数组元素不实现#<=>时,这会失败

推荐答案

使用match_array,它将另一个数组作为参数,或使用contain_exactly,它将每个元素作为单独的参数,有时对可读性很有用.(docs)

例如:

expect([1, 2, 3]).to match_array [3, 2, 1]

expect([1, 2, 3]).to contain_exactly 3, 2, 1

Ruby相关问答推荐

Ruby插值法导致无序输出

BasicObject 的 singleton_class 的超类如何以及为什么是 Ruby 中的 Class 类?

Ruby 3 从多个预定纤程中收集结果

使用 Ruby,是否可以将 BigDecimal("1") / BigDecimal("3") 打印为 0.3333333333333... 到任意长度?

Ruby 按变量条件划分数组数组

Ruby on Rails:你能把 Ruby 代码放在 YAML 配置文件中吗?

如何在 VIM 中导航 Ruby 方法?

在 ruby​​ 中访问嵌套哈希的元素

如何将 STDOUT 捕获到字符串?

Ruby 中的 method_missing trap

group_by 在 rails by 2 或更多属性

Ruby中block和&block的区别

当我将参数传递给脚本时,使用 gets() 会出现没有这样的文件或目录错误

Ruby 异常 - 为什么是else?

如何在 macOS 上卸载 rbenv?

如何在 Ruby 中使用全局变量或常量值?

您的 Ruby 版本是 2.0.0,但您的 Gemfile 指定了 2.1.0

如何使用 Ruby-Rails 删除文件夹的所有内容?

在 Ruby 中创建二维数组和访问子数组

Ruby:如何将数组数组连接成一个