I am testing my controller action for practice. In my controller, I just want to get all the distinct products by name from my database:
def shop
@products = Product.select('distinct on (name) *').sort_by &:order
end
I've checked this manually and it works fine. Now I am setting up my test using my RSpec and I want to test that @products is an array greater than 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
Now, I've tried several different combinations of the expect... but it keeps telling me that its either nil or 0, which I know it's not. How can I test that an array is greater 0?
Try
expect(assigns(:products)).to_not be_empty
This works because the array responds to empty?
. Another way could be
expect(assigns(:products).count).to be_positive
Because integers respond to positive?
While if you wanted to check an actual count
expect(assigns(:products).count).to eq 1