2010-12-09 6 views
7

Dans mon application Rails 3 actuelle, je fais des tests unitaires pour m'assurer que les appels pour mettre à jour S3 ne sont effectués que dans certaines situations. Je ne veux pas mettre à jour S3 pendant les tests, donc j'utilise Mocha pour éliminer le comportement. Y at-il un moyen de s'assurer qu'une fonction est appelée en utilisant moka? J'ai pris un coup d'œil à des attentes, et à moins que je le fais mal, il semble que je dois faire:Tester si une fonction est appelée en utilisant Mocha

object.expects(:function_name).once 

Cependant, cela ne donne pas les résultats escomptés: Ce signaleront une erreur si function_name est appelé deux fois (ce qui est souhaité), il ne marquera pas une erreur si elle n'est appelée qu'une seule fois (comme il se doit), mais le problème est NE DOIT PAS signaler une erreur si la fonction est appelée zéro fois. J'ai besoin d'un moyen de m'assurer qu'il est appelé. Il semble que le moka devrait soutenir cela, alors peut-être que je me trompe. Toute aide serait grandement appréciée.

***** CORRECTION:

se trouve que je le faisais droit, sauf que la méthode mocha_verify n'a pas été appelé automatiquement. Pour toute personne qui a un problème similaire, consultez la réponse de Ole Morten Amundsen ici: Mocha Mock Carries To Another Test

+2

vous devriez marquer une réponse comme acceptée. De cette façon, vous ne perdez pas votre temps, ceux qui naviguent pour "Q sans réponse" pour aider de manière désintéressée les gens comme vous et moi. – oma

Répondre

6

ou tout simplement

object.expects(:function_name).twice 

alternativement, si elle a une entrée differnet vous devriez tester cela

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

ne sait pas si cela peut vous aider, mais cela devrait vous donner un bon départ. FYI: 'une fois' est la valeur par défaut. Bonne chance, faire TDD (= test en premier) ou moqueur sera une douleur :)

Assurez-vous de charger mocha dernier, il est donc vraiment être chargé, comme dans ma réponse ici: Mocha Mock Carries To Another Test

+0

Il s'avère que votre réponse ici http://stackoverflow.com/questions/3118866/mocha-mock-carries-to-another-test/4375296#4375296 résolu mon problème. Le hook mocha_verify n'a pas été appelé en raison du bundler de commande fait avec la gemme moka. – pushmatrix

+0

wow, c'est un premier emploi pour moi :) J'adore Mocha et je veux aider les autres à l'utiliser. J'ai ajouté mon autre réponse à ma réponse ici, donc vous pouvez la marquer comme acceptée. Heureux d'avoir pu aider! – oma

Questions connexes