gpt4 book ai didi

ruby-on-rails - 如何测试数据库记录是否按id排序?

转载 作者:行者123 更新时间:2023-11-29 13:24:34 25 4
gpt4 key购买 nike

我正在测试一个 JSON API。直到最近我还假设返回的记录是按 id 排序的。但是当Posts.all变成Posts.where(user_id: params[:user_id])时,就打破了下面的测试:

it 'takes "limit" param' do
post1 = create :post
post2 = create :post, user_id: post1.user_id
get user_posts_path(post1.user_id, limit: 1)
expect(response.body).to be_json_eql([{id: post1.id}].to_json).including(only: :id)
end

我或许可以添加以下测试:

it 'returns records ordered by id' do
post1 = create :post
post2 = create :post, user_id: post1.user_id
get user_posts_path(post1.user_id)
expect(response.body).to be_json_eql([{id: post1.id}, {id: post2.id}].to_json).including(only: :id)
end

但它在没有向 Controller 添加 .order(:id) 的情况下成功了。我想确保它在那里。我该怎么办?

最佳答案

不能保证顺序,因此虽然您可能会得到按 id 排序的结果的行为,但不能保证,您不应该依赖它。

参见“Why is SSMS inserting new rows at the top of a table not the bottom?

此外,由于它主要通过 id 返回,因此您的测试在没有设置顺序的情况下大多会成功,但它什么也没告诉您,这是一种不好的做法。

那么,您真的是在问如果我做了一些不安全的事情,我该如何编写测试来检查结果是否会发生不良情况?

我不确定你为什么要那样做。你有一个潜在的间歇性错误,当数据库决定它想要在任何环境中出现时,它就会出现。即使它不会发生在您的测试环境中,它也可能会发生在生产环境中,因此它什么也不会告诉您。通过添加订单来移除错误,然后您的测试应该通过已知行为。

关于ruby-on-rails - 如何测试数据库记录是否按id排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36131045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com