RSpec检查数组的数量

Dar*_*isa 8 ruby rspec ruby-on-rails rspec-rails

我正在测试我的控制器动作以进行练习。在我的控制器中,我只想从数据库中按名称获取所有不同的产品:

  def shop
    @products = Product.select('distinct on (name) *').sort_by &:order
  end
Run Code Online (Sandbox Code Playgroud)

我已经手动检查过了,效果很好。现在,我使用我的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
Run Code Online (Sandbox Code Playgroud)

现在,我尝试了期望的几种不同组合...但是它一直告诉我它的值为nil或0,但我知道不是。如何测试一个数组大于0?

Urs*_*sus 9

尝试

expect(assigns(:products)).to_not be_empty
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为数组响应empty?。另一种方法可能是

expect(assigns(:products).count).to be_positive
Run Code Online (Sandbox Code Playgroud)

因为整数响应 positive?

如果您想查看实际数量

expect(assigns(:products).count).to eq 1
Run Code Online (Sandbox Code Playgroud)