Rspec测试或类似(|| =)运算符

mor*_*man 0 ruby testing rspec ruby-on-rails mocking

我想知道有没有办法测试一个表达式:

var[:test] ||= "value"
Run Code Online (Sandbox Code Playgroud)

使用Rspec.基本上我希望能够指定类似的东西:

var = mock
var.should_receive(:[]||=).with(:test)
Run Code Online (Sandbox Code Playgroud)

更确切地说,我想测试它||=是否应用于var [:test].

谢谢.

sko*_*rks 7

该构造var[:test] ||= value本质上意味着:

if there is a key :test in hash
   var[:test] should remain what it is
else
   var[:test] = value
Run Code Online (Sandbox Code Playgroud)

这意味着你手上有两个测试,类似于:

it "should not override var[:test]"
it "should set var[:test] to be equal to 'value'"
Run Code Online (Sandbox Code Playgroud)

例如,假设您有一个类:

class Blah
  attr_reader :var
  def initialize(var={})
    @var=var
  end
  def set_test_key(value)
    var[:test] ||= "value"
  end
end
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

这是它的要点,需要适应你的情况.