rspec 2: обнаружение вызова метода, но при этом он выполняет свою функцию - PullRequest
12 голосов
/ 26 августа 2011

Я хочу проверить, был ли метод вызван ровно (n) раз, , но Я все еще хочу, чтобы этот метод выполнял свою первоначальную функцию.Рассмотрим простую систему миниатюр, которая кэширует файл миниатюр и убедитесь, что исполняемый файл ImageMagick «конвертировать», который создает миниатюру, вызывается только при первом запросе.но могут быть случаи, когда я этого не делаю.Второй сбой, потому что обнаружен вызов Thumbnail.convert, но сам метод ничего не делает.Есть ли какой-то способ просто обнаружить вызов метода и сделать его оригинальным?

Кстати: я подозреваю, что этот вопрос очень похож, но потом я теряюсь в описании, а также без ответа ...

Ответы [ 2 ]

20 голосов
/ 19 ноября 2012

Теперь есть метод and_call_original именно для этого варианта использования.(RSpec 2.12)

Sinatra::Thumbnails.should_receive(:convert).and_call_original

Документацию можно найти на той же странице, на которую ссылается Жуан, здесь .

См. Также: список изменений

15 голосов
/ 29 августа 2011

Ура! Я думаю, что я понял это!

it "should detect a cached version" do
  original_method = Sinatra::Thumbnails.method(:convert)
  Sinatra::Thumbnails.should_receive(:convert).exactly(1).times do |*args|
    original_method.call(*args)
  end
  thumbnail_url = thumbnail_url_for("images/something.jpg") # 
  get thumbnail_url
  last_response.should be_ok
  get thumbnail_url
  last_response.should be_ok
end

Это задокументировано (плохо, на мой взгляд) в здесь в самом конце ...

...