在RSpec中检查方法调用的参数是否为test double

时间:2012-01-10 09:23:13

标签: ruby rspec

是否可以检查传递给方法调用参数的参数是否满足某些约束。我想做点什么

my_double = double("MyObject")
my_double.should_receive(:mocked_method).with{ <something that has an attribute called name and value "john"> }

提前多多感谢。

编辑:我会尝试澄清一下我想要完成的事情

我想要的是检查模拟的给定方法是否被调用传递满足某些条件的对象

3 个答案:

答案 0 :(得分:6)

记录。我想要完成的事情可以用

完成
  @test_double.should_receive(:send_mail) do |mail|
    mail.to.should eq(["john@aol.com"])
    mail.body.decoded.should include "Error"
  end

代码应使用满足块中指定条件的参数调用给定对象的方法send_mail。

答案 1 :(得分:1)

只是要添加,如果您的方法接受多个参数,您可以在块中执行以下操作:

allow_any_instance_of(MyClass).to receive(:my_method) do |*args|
  expect(args[0]).to include "something"
  expect(args[1]).to match(/something_else/)
  # etc
end

答案 2 :(得分:0)

在我看来,它应该是一个单独的测试:

context "after being passed to my_double" do
  before { my_double( XXX ) }
  subject { XXX }
  it { should respond_to :attribute }
  describe :attribute do
    subject { XXX.attribute }
    it { should == 5 }
  end
end