2010-12-09 10 views
7

In meiner aktuellen Rails 3-App mache ich einige Komponententests, um sicherzustellen, dass Anrufe zum Aktualisieren von S3 nur in bestimmten Situationen ausgeführt werden. Ich möchte S3 während der Tests nicht aktualisieren, daher benutze ich Mocha, um das Verhalten auszublenden. Gibt es eine Möglichkeit, um sicherzustellen, dass eine Funktion mit Mocha aufgerufen wird? Ich habe einen Blick auf die Erwartungen getroffen, und wenn ich es falsch mache, es scheint, ich habe zu tun:Testen, ob eine Funktion mit Mocha aufgerufen wird

object.expects(:function_name).once 

Dies ist jedoch nicht die gewünschten Ergebnisse liefern: Dies wird Flagge einen Fehler, wenn function_name ist zweimal aufgerufen (was gewünscht ist), wird es keinen Fehler melden, wenn es nur einmal aufgerufen wird (wie es sollte), aber das Problem ist es WILL NICHT Flag einen Fehler, wenn die Funktion null mal aufgerufen wird. Ich brauche einen Weg, um sicherzustellen, dass es heißt. Es scheint, als ob Mocha dies unterstützen sollte, also mache ich es vielleicht falsch. Jede Hilfe würde sehr geschätzt werden.

***** KORREKTUR:

Es stellte sich heraus, dass ich es richtig tat, außer dass die mocha_verify Methode nicht automatisch aufgerufen wurde. Für alle, die ein ähnliches Problem hat Besuche Ole Morten Amundsens Antwort hier: Mocha Mock Carries To Another Test

+2

Sie sollten Markieren Sie eine Antwort als akzeptiert. Auf diese Weise verschwendest du keine guten Leute, die nach "unbeantwortetem Q" suchen, um selbstlos Menschen wie dich und mich zu helfen. – oma

Antwort

6

oder nur

object.expects(:function_name).twice 

Alternativ, wenn es einen anderen Eingang hat, sollten Sie das

testen
resultmock = mock 
object.expects(:function_name).with(someobject).returns(mock) 
resultmock.expects(:something).returns(true) 
object.expects(:function_name).with(resultmock) 

weiß nicht, ob das hilft, aber es sollte Ihnen einen Kick-Start geben. FYI: 'einmal' ist Standard. Viel Glück, tun TDD (= Test-First) oder spöttischen wird ein Schmerz :)

Seien Sie sicher, Mokka zuletzt zu laden, so dass es wirklich geladen wird, wie es in meiner Antwort hier: Mocha Mock Carries To Another Test

+0

Stellt sich heraus Ihre Antwort hier http://stackoverflow.com/questions/3118866/mocha-mock-carries-to-another-test/4375296#4375296 löste mein Problem. Der mocha_verify-Hook wurde nicht aufgerufen, weil der Ordering Bundler den Mokka-Edelstein verwendet hat. – pushmatrix

+0

wow, das ist ein Anfänger für mich :) Ich liebe Mocha und möchte anderen helfen, es zu benutzen. Ich habe meine Antwort hier zu meiner Antwort hinzugefügt, also können Sie sie als akzeptiert markieren. Froh, dass ich helfen konnte! – oma

Verwandte Themen