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) }