コントローラーのアクションを練習用にテストしています。私のコントローラーでは、データベースからすべての個別の製品を名前で取得したいだけです。
def shop
@products = Product.select('distinct on (name) *').sort_by &:order
end
これを手動で確認しましたが、正常に動作します。今、RSpecを使用してテストを設定していて、@ productsが0より大きい配列であることをテストしたいと思います。
RSpec.describe PagesController, type: :controller do
describe 'GET #shop' do
it 'should get all proudcts' do
get :shop
expect(assigns(:products).count).to be > 0
end
end
end
今、私はexpectのいくつかの異なる組み合わせを試しました...しかし、それはnilまたは0のいずれかであると私に言い続けますが、そうではないことを私は知っています。配列が0より大きいことをテストするにはどうすればよいですか?
試してみてください
expect(assigns(:products)).to_not be_empty
これは、配列がempty?
に応答するために機能します。別の方法は
expect(assigns(:products).count).to be_positive
整数はpositive?
に応答するため
実際のカウントを確認したい場合は
expect(assigns(:products).count).to eq 1