Я хочу проверить, был ли метод вызван точно (n) раз, но я все еще хочу, чтобы этот метод выполнял свою оригинальную функцию. Рассмотрим простую миниатюрную систему, которая кэширует файл миниатюр и гарантирует, что исполняемый файл ImageMagick "convert", создающий миниатюру, вызывается только при первом запросе.
it "this passes: should detect a cached version" do
thumbnail_url = thumbnail_url_for("images/something.jpg")
get thumbnail_url
last_response.should be_ok
Sinatra::Thumbnail.should_not_receive(:convert)
get thumbnail_url
last_response.should be_ok
end
it "this fails: should detect a cached version" do
Sinatra::Thumbnail.should_receive(:convert).exactly(1).times
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
В моем случае я ухожу с первой попытки, но могут быть случаи, когда я этого не делаю. Вторая неудачна, потому что обнаружен вызов Thumbnail.convert
, но сам метод ничего не делает. Есть ли способ определить вызов метода и сделать его оригинальным?
Кстати: я подозреваю, что этот question очень похож, но потом я теряюсь в описании, а также он не отвечает...