rspec 2: обнаружение вызова метода, но при этом он выполняет свою функцию
Я хочу проверить, был ли метод вызван ровно (n) раз, но я все еще хочу, чтобы этот метод выполнял свою первоначальную функцию. Рассмотрим простую систему миниатюр, которая кэширует файл миниатюр и убедитесь, что исполняемый файл ImageMagick "конвертировать", который создает миниатюру, вызывается только при первом запросе.
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
обнаружен, но сам метод ничего не делает. Есть ли какой-то способ просто обнаружить вызов метода и заставить его делать это оригинально?
Кстати: я подозреваю, что этот вопрос очень похож, но потом я теряюсь в описании, а также он остается без ответа...
2 ответа
Ура! Я думаю, что я понял это!
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
Это задокументировано (плохо, на мой взгляд) здесь, в самом конце...