我有一个User
班has_many
Job
。我使用以下代码映射作业:
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版本中失败?
答案 0 :(得分:6)
潜在问题不是因为map
,而是应该保留订单。相反,user.jobs
本身可能处于不同的顺序(在每个测试中),因为没有使用任何明确的order by
子句。如果没有明确的order by
,即使按特定顺序创建作业,也无法保证作业的顺序。
您应该使用http://www.rubydoc.info/github/rspec/rspec-expectations/RSpec/Matchers:match_array代替eq
进行比较,以避免此类问题。