在Rspec中测试非静态方法?

时间:2011-02-05 19:06:05

标签: ruby rspec

使用rspec进行测试时,是否可以检查传递给非静态方法的参数?

如果我想要测试A类,在A类中我称之为B类,B已经过测试。我唯一想测试的就是B的进入论证。

class A
  def method
    number = 10
    b = B.new
    b.calling(number)
  end
end

class B
  def calling(argument)
    # This code in this class is already testet
  end
end

如何测试b.calling的输入参数?

到目前为止,我已经尝试过,但没有成功。

it "should work" do
  b = mock(B)
  b.should_receive(:calling).at_least(1).times
  A.new.method
end

总是失败,因为b从未被召唤过。

1 个答案:

答案 0 :(得分:4)

你的规范中的b不是b A是实例化的(当你调用new时它会返回一个真实的B实例,因为你没有存根),试试这个:

it "should work" do
  b = mock(B)
  B.should_receive(:new).and_return(b)
  b.should_receive(:calling).at_least(1).times
  A.new.method
end