Voglio verificare se un metodo è stato chiamato esattamente (n) volte, ma Desidero comunque che quel metodo esegua la sua funzione originale. Si consideri un semplice sistema di thumbnailing che memorizza nella cache il file di anteprima e si assicura che l'eseguibile "convert" di ImageMagick che crea la miniatura venga chiamato solo alla prima richiesta.rspec 2: rileva la chiamata al metodo ma continua a farlo funzionare
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
Nel mio caso ho farla franca con il mio primo tentativo, ma ci potrebbero essere casi in cui non lo faccio. Il secondo non riesce perché viene rilevata la chiamata Thumbnail.convert
ma il metodo stesso non esegue alcuna operazione. C'è un modo per rilevare solo la chiamata al metodo e farlo fare è la cosa originale?
BTW: ho il sospetto che questo question è molto simile, ma poi mi perdo nella descrizione e anche che è senza risposta ...
Grazie, ha funzionato come un fascino! – thomax