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

Теперь, я попробовал несколько различных комбинаций ожидаемого... но он продолжает говорить мне, что это либо ноль, либо 0, что я знаю, что это не так. Как я могу проверить, что массив больше 0?

1 ответ

Решение

Пытаться

expect(assigns(:products)).to_not be_empty

Это работает, потому что массив отвечает empty?, Другой способ может быть

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

Потому что целые числа отвечают на positive?

Хотя, если вы хотите проверить фактический счет

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

Вы также можете немного перевернуть его следующим образом:

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

Это позволяет использовать subject, например, так:

subject { assigns(:products) }

it { is_expected.to have_attributes(count: be_positive) }
Другие вопросы по тегам