RSpec - 使用test double作为块参数

stu*_*nik 5 ruby rspec

我有一些Ruby代码,如下所示:

Something.create do |x|
    x.foo = bar
end 
Run Code Online (Sandbox Code Playgroud)

我想编写一个使用double代替块参数x的测试,以便我可以调用:

x_double.should_receive(:foo).with("whatever").
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Mor*_*ori 8

 specify 'something' do
   x = double
   x.should_receive(:foo=).with("whatever")
   Something.should_receive(:create).and_yield(x)
   # call the relevant method
 end
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,但我想挑剔.`Something.should_receive(:create)`是一个测试 - 一个断言 - 但它没有断言stubotnik说他想测试的行为.所以我通过使用`Something.stub(:create).and_return(x)`来区分测试设置和测试中的行为,这不是断言`Something.create`的行为. (3认同)