我正在测试我的控制器动作以进行练习。在我的控制器中,我只想从我的数据库中获取所有不同的产品名称:
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
现在,我尝试了几种不同的期望组合...但它一直告诉我它的nil或0,我知道它不是。如何测试数组是否大于0?
答案 0 :(得分:4)
尝试
expect(assigns(:products)).to_not be_empty
这是有效的,因为数组响应empty?
。另一种方式可能是
expect(assigns(:products).count).to be_positive
因为整数会回复positive?
如果你想检查实际的数量
expect(assigns(:products).count).to eq 1
答案 1 :(得分:1)
您还可以将其更改为以下内容:
expect(assigns(:products)).to have_attributes(count: be_positive)
这允许您使用subject
,例如:
subject { assigns(:products) }
it { is_expected.to have_attributes(count: be_positive) }