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”}}}
就足够了。现在清楚了吗?