匹配rspec中参数的属性值

时间:2014-04-11 04:36:57

标签: ruby rspec matcher

有没有办法在rspec中匹配参数的属性 value ?检查the documentation,看起来还有其他可用的匹配器,例如anythingan_instance_ofhash_including - 但没有任何内容可以检查对象属性的值。

示例 - 假设我有这个实例方法:

class DateParser
  def parse_year(a_date)
    puts a_date.year
  end
end

然后我可以写下这样的期望:

dp = DateParser.new
expect(dp).to receive(:parse_year).with(some_matcher)

我希望some_matcher检查parse_year是否使用具有值为2014的属性year的任何对象进行调用。这是不可能的。 -box参数在rspec中匹配,还是必须编写自定义的?

2 个答案:

答案 0 :(得分:13)

您可以传递一个块并设置对块内参数的期望:

describe DateParser do
  it "expects a date with year 2014" do
    expect(subject).to receive(:parse_year) do |date|
      expect(date.year).to eq(2014)
    end
    subject.parse_year(Date.new(2014,1,1))
  end
end

答案 1 :(得分:0)

也许在传递日期使用双倍的东西?

date = double()
date.should_receive(:year)
DateParser.new.parse_year(date)

目前尚不清楚您所需要的日期是什么意思。但您可以添加.and_return(2014)来获取该行为。