我想知道有没有办法测试表达式:
var[:test] ||= "value"
使用Rspec。基本上我希望能够指定类似的东西:
var = mock
var.should_receive(:[]||=).with(:test)
更确切地说,我想测试||=
是否适用于var [:test]。
感谢。
答案 0 :(得分:7)
构造var[:test] ||= value
实质上意味着:
if there is a key :test in hash
var[:test] should remain what it is
else
var[:test] = value
这意味着你手上有两个测试,类似于:
it "should not override var[:test]"
it "should set var[:test] to be equal to 'value'"
例如,假设你有一个班级:
class Blah
attr_reader :var
def initialize(var={})
@var=var
end
def set_test_key(value)
var[:test] ||= "value"
end
end
您可以执行以下操作:
describe Blah do
it "should not override var[:test]" do
blah = Blah.new({:test=>"foo"})
blah.set_test_key("bar")
blah.should equal("foo")
end
it "should set var[:test] to be equal to 'bar'" do
blah = Blah.new
blah.set_test_key("bar")
blah.should equal("bar")
end
end
这是它的要点,需要适应你的情况。
答案 1 :(得分:1)
没有:[]||=
运算符。
var[:test] ||= value
只是
的简写var[:test] = var[:test] || value
答案 2 :(得分:0)
不确定模拟,但假设代码在方法中:
def value
@value ||= "value"
end
你可以简单地调用它两次并检查两个对象是否相同:
it "should memoize the value" do
value.should equal(value)
end