Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 测试方法是否返回“非空”值_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

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

Ruby on rails 测试方法是否返回“非空”值,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我正在测试我的方法populate()是否返回一个非空值(它确实返回了一个大于0的整数),但在正确写入它时遇到了问题。我有: describe House::Room do describe '.populate' do let(:info) { $info = {"people"=> {"name"=>"Jordan", "last_name"=>"McC

我正在测试我的方法
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

您需要将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_in”,或者在同一测试中编写几个expect语句,如“expect为整数”、“expect大于0”等。。。在“it”块中,您可以拥有的expect语句的数量没有限制,只有在满足所有期望的情况下,测试才会通过。(也就是说,我相信最好的做法是将它分成单独的测试。)

这里首先要删除的是
$info=
。不需要。你的期望与主题不符。所以写下你正在测试的东西。这有助于提高可读性。在Ruby中,$表示全局变量,这通常意味着您做错了什么。这些几乎总是一个糟糕的计划,应该尽可能避免。@ArupRakshit应该是
info
?默认情况下,块返回值将分配给
let(:info)
。因此,除了那里的
散列
之外,你不需要任何东西。mike
让(:info){{{“people”=>{“name”=>“Jordan”,“last_name”=>“McClalister”}}}
就足够了。现在清楚了吗?