‘array.map’是否保留原始顺序?

我有一个Userhas_many Job s。 我使用以下代码映射作业:

 def ranges user.jobs.map { |u| [u.start_at, u.end_at] } end 

我有一个比较两个数组的规范:

 my_array = [[start1, end1], [start2, end2]] expect(ranges).to eq my_array 

它传递给本地,但不是Bamboo构建。 我不得不改变它以通过构建。 我仍然不明白为什么它会像这样。 即使地图不保留订单,我也期待一些随机模式。

为什么这会传递给我的本地,但是在Bamboo版本中失败?

根本问题不是因为map ,它应该保留顺序。 相反, user.jobs本身可能处于不同的顺序(在每个测试中),因为没有使用任何明确的order by子句。 如果没有明确的order by ,即使按特定顺序创建作业,也无法保证作业的顺序。

您应该使用http://www.rubydoc.info/github/rspec/rspec-expectations/RSpec/Matchers:match_array而不是eq进行比较,以避免此类问题。