web-dev-qa-db-ja.com

RSpecは配列の数をチェックします

コントローラーのアクションを練習用にテストしています。私のコントローラーでは、データベースからすべての個別の製品を名前で取得したいだけです。

  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より大きいことをテストするにはどうすればよいですか?

8
Darkisa

試してみてください

expect(assigns(:products)).to_not be_empty

これは、配列がempty?に応答するために機能します。別の方法は

expect(assigns(:products).count).to be_positive

整数はpositive?に応答するため

実際のカウントを確認したい場合は

expect(assigns(:products).count).to eq 1
9
Ursus