2012-09-12 4 views
13

Qual è la differenza tra stub_model e mock_model in RSpec? Finora, so che gli stub vengono utilizzati per impedire semplicemente che il metodo reale venga richiamato e restituire un valore predefinito, mentre i mock sono effettivamente delle aspettative e richiedono che il metodo venga chiamato sul ricevitore.Qual è la differenza tra stub_model e mock_model in RSpec?

So anche che questi mozzi/mock vengono utilizzati per consentire test isolati, ad esempio nei controller senza toccare il modello. Ma sono ancora confuso con questi due metodi, quando vengono usati esattamente? Dettagli ed esempi sarebbero molto apprezzati. Molte grazie!

+0

Non sono sicuro se questo vale per la tua domanda ma una cosa utile per me è stato rendersi conto che rspec "schernisce" sono stati per la creazione di oggetti falsi, mentre "stub" erano per la creazione di metodi falsi . Si noti che non sto parlando di 'stub_model' o' mock_model' ma dei termini più generici di mock e stub. – Dty

risposta

11

stub_model

Il metodo stub_model genera un'istanza di un modello modello attivo.

Mentre è possibile utilizzare stub_model in qualsiasi esempio (modello, vista, controller, helper), è particolarmente utile negli esempi di visualizzazione, che sono intrinsecamente più basati sullo stato di quelli basati sull'interazione.

mock_model

Il metodo mock_model genera una test di doppia che si comporta come un modello attivo Modello . Questo è diverso dal metodo stub_model che genera un'istanza di una classe ActiveModel reale.

Il vantaggio di mock_model su stub_model è un doppio vero, quindi gli esempi non dipendono dal comportamento (o dal comportamento errato) o dall'esistenza di altri codici. Se stai lavorando su una specifica del controller e hai bisogno di un modello che non esiste, puoi passare una stringa da mock_model e l'oggetto generato agirà come se fosse un'istanza della classe chiamata da quella stringa.

docs RSpec: stub_model e mock_model