Chcę sprawdzić, czy metoda została wywołana dokładnie (n) razy, , ale Nadal chcę tej metody, aby wykonać swoją pierwotną funkcję. Rozważmy prosty system miniatur, który buforuje plik miniatury i upewnia się, że plik wykonywalny "convert" programu ImageMagick, który tworzy miniaturę, jest wywoływany tylko przy pierwszym żądaniu.rspec 2: Wykrywanie wywołania metody, ale nadal ma ona swoją funkcję
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
W moim przypadku unikam mojej pierwszej próby, ale mogą być przypadki, w których nie. Druga nie powiedzie się, ponieważ wykryto wywołanie Thumbnail.convert
, ale sama metoda niczego nie robi. Czy jest jakiś sposób, aby wykryć wezwanie do metody i sprawić, by była oryginalna?
BTW: Ja podejrzewam question jest bardzo podobny, ale potem zgubić w opisie, a także to bez odpowiedzi ...
Dzięki, działało jak czar! – thomax