我正在測試一個JSON API。直到最近,我還是假設記錄是按id排序的。但是,當Posts.all
變成Posts.where(user_id: params[:user_id])
,它打破了以下測試:如何測試數據庫記錄是否按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
,但它成功不增加.order(:id)
到控制器。我想確保它在那裏。我該怎麼辦?
我認爲你的測試應該驗證行爲,而不是如何編碼。問題在於,你如何消除誤報? –
當然,我不在乎控制器裏面有什麼,我想確保結果是按id排序的,總是不是。 –