我可以将所有调用存根到第一个方法吗?

时间:2014-05-09 09:34:37

标签: rspec

使用Rspec,有没有办法可以将除第一个调用之外的所有调用都存根?

示例:

class Book
  def foo
    "Book#foo()"
  end
end

在规范中:

it 'x' do
  # .... (do something to stub all but the first method call to `Book#foo`)....

  b = Book.new
  expect(b.foo).to eq('Book#foo()') 
  expect(b.foo).to be_nil 
  expect(b.foo).to be_nil 
end

任何?

2 个答案:

答案 0 :(得分:0)

您可以在第一个中使用ordered expectationscall the original method

也可以看看sequences

答案 1 :(得分:0)

是的,这是可行的。我实际上没有对此进行测试,但如果我的记忆对我有用,那么应该这样做:

it 'does some funky stubbing' do
  book = Book.new

  # the first time it will not be stubbed, all subsequent times it will return nil
  allow(book).to receive(:foo) { book.foo, nil }

  expect(book.foo).to eq('Book#foo()') 
  expect(book.foo).to be_nil 
  expect(book.foo).to be_nil 
end