2010-12-09 23 views
7

En mi aplicación actual de Rails 3, realizo algunas pruebas de unidad para asegurarme de que las llamadas para actualizar S3 solo se realicen en ciertas situaciones. No quiero actualizar S3 durante las pruebas, entonces estoy usando Mocha para anular el comportamiento. ¿Hay alguna forma de asegurarse de que se llame a una función usando mocha? He echado un vistazo a las expectativas, ya menos que lo estoy haciendo mal, parece que tengo que hacer:Comprobando si se llama a una función usando Mocha

object.expects(:function_name).once 

Sin embargo, esto no produce los resultados deseados: Esta bandera voluntad un error si es function_name llamado dos veces (lo que se desea), NO marcará un error si solo se llama una vez (como debería), pero el problema es NO marcar un error si la función se llama cero veces. Necesito una forma de asegurarme de que se llame. Parece que Mocha debería soportar esto, así que tal vez lo estoy haciendo mal. Cualquier ayuda sería muy apreciada.

***** CORRECCIÓN:

Resulta que yo estaba haciendo las cosas bien, excepto que el método mocha_verify no estaba siendo llamado automáticamente. Para cualquier persona que está teniendo un problema similar, echa un vistazo a la respuesta de Ole Morten Amundsen aquí: Mocha Mock Carries To Another Test

+2

que debiera marque una respuesta como aceptada. De esa manera no desperdicia el tiempo de la gente buena, aquellos que buscan "Q sin respuesta" para ayudar desinteresadamente a personas como tú y como yo. – oma

Respuesta

6

o simplemente

object.expects(:function_name).twice 

alternativamente, si tiene entrada differnet debe probar que

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

no sé si esto ayuda, pero debería darle un puntapié inicial. FYI: 'una vez' es el predeterminado. Buena suerte, hacer TDD (= prueba primero) o de burla serán un dolor :)

Asegúrese de cargar moka pasado, por lo que realmente se está cargando, como en mi respuesta aquí: Mocha Mock Carries To Another Test

+0

Resulta que su respuesta aquí http://stackoverflow.com/questions/3118866/mocha-mock-carries-to-another-test/4375296#4375296 solucionó mi problema. El gancho mocha_verify no fue llamado debido al orden que hizo el paquete con la gema de mocha. – pushmatrix

+0

wow, es una primera vez para mí :) Me encanta Mocha y quiero ayudar a otros a usarlo. He agregado mi otra respuesta a mi respuesta aquí, por lo que puede marcarla como aceptada. ¡Me alegro de poder ayudar! – oma

Cuestiones relacionadas