Rspec2:期望在众多参数中引用一些参数

时间:2012-11-15 11:38:13

标签: unit-testing activerecord rspec rspec2

我需要测试一段代码执行两个sql语句,我正在说

  ActiveRecord::Base.connection.should_receive(:execute).with("s1")
  ActiveRecord::Base.connection.should_receive(:execute).with("s2")

然而,该代码还执行了许多其他我不关心的语句,这些语句会导致测试失败。如何告诉Rspec确保s1s2在执行语句列表中?

1 个答案:

答案 0 :(得分:2)

将您的RSpec版本更新为2.12,您将可以访问and_call_original方法(请参阅documentationuse cases)。使用该方法,您可以存根execute ActiveRecord::Base.connection方法,并调用原始方法,然后只需添加您想要的期望:

ActiveRecord::Base.connection.stub(:execute).and_call_original
ActiveRecord::Base.connection.should_receive(:execute).with(:s1)
ActiveRecord::Base.connection.should_receive(:execute).with(:s2)

如果由于某种原因您没有使用(或不想使用)最新版本的RSpec,您可以通过这种方式实现相同的功能:

execute = ActiveRecord::Base.connection.method(:execute)
ActiveRecord::Base.connection.should_receive(:execute).with(:s1)
ActiveRecord::Base.connection.should_receive(:execute).with(:s2)
ActiveRecord::Base.connection.stub(:execute) { |*args| execute.call(*args) }

参考文献: