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

问题描述 投票:0回答:2

我正在测试我的方法

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
ruby-on-rails ruby rspec
2个回答
6
投票

您需要将 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”块中可以包含的期望语句的数量没有限制,只有满足所有期望,测试才会通过。 (也就是说,我认为最好的做法是将其分成单独的测试。)


0
投票
根据

RSpec/BeNil

rubocop-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
© www.soinside.com 2019 - 2024. All rights reserved.