‘array.map’是否保留原始顺序?
我有一个User
类has_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
进行比较,以避免此类问题。