ruby 测试方法是否返回“非空”值

insrf1ej  于 2023-03-12  发布在  Ruby
关注(0)|答案(2)|浏览(163)

我正在测试我的方法populate()是否返回一个非空值(它确实返回了一个大于0的整数),但是在正确编写它时遇到了麻烦。

describe House::Room do
  describe '.populate' do
    let(:info) {
      $info = {"people"=>
                        {"name"=>"Jordan",
                         "last_name"=>"McClalister"}}
              }
    it 'should return an integer > 0' do
      expect(House::Room.populate(info)).not_to eq(nil)
    end
  end
end
6kkfgxo0

6kkfgxo01#

您需要将let赋值更改为:

describe House::Room do
  describe '.populate' do
    let(:info) {"people"=>
                        {"name"=>"Jordan",
                         "last_name"=>"McClalister"}
               }
    it 'should return an integer > 0' do
      expect(House::Room.populate(info)).not_to be(nil)
    end
  end
end

这将使您的代码按预期工作。
但是,如果您希望更具体,也可以使用其他匹配器,如“be_within”,或者在同一个测试中编写多个expect语句,如“expect to be an integer”、“expect to be greater than 0”等......“it”块中可以包含的expect语句的数量没有限制,只有满足所有期望,测试才会通过。(也就是说,我相信最好的实践是将其分成单独的测试。)

watbbzwu

watbbzwu2#

根据RSpec/BeNilrubocop-rspec支持be_nil胜过be(nil)
因此,@GabrielBonner提供的答案可以更好地表示为:

describe House::Room do
  describe '.populate' do
    let(:info) {"people"=>
                        {"name"=>"Jordan",
                         "last_name"=>"McClalister"}
               }
    it 'should return an integer > 0' do
      expect(House::Room.populate(info)).not_to be_nil
    end
  end
end

相关问题