RSpec 检查数组的个数
RSpec check the count of an array
我正在测试我的控制器动作以供练习。在我的控制器中,我只想从我的数据库中按名称获取所有不同的产品:
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?
尝试
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) }
我正在测试我的控制器动作以供练习。在我的控制器中,我只想从我的数据库中按名称获取所有不同的产品:
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?
尝试
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) }