2012-05-05 43 views
17

Estoy usando MiniTest 2.12.1 (la última versión del marco de pruebas de stock incluido con Ruby> = 1.9) y no puedo averiguar cómo simular un método de clase con él, de la misma manera que es posible con los gustos de Mocha, por ejemplo:Ruby: burlarse de un método de clase con MiniTest?

product = Product.new 
Product.expects(:find).with(1).returns(product) 
assert_equal product, Product.find(1) 

he estado incursionando Internet durante días y todavía estoy para encontrar una respuesta razonable a este. ¿Por favor ayuda?

+0

Creo que no es posible hacer este tipo de _mocking_ con 'minitest/mock', [duplicado?] (http://stackoverflow.com/questions/7211086/how-do-i-stub-things-in-minitest) – fguillen

Respuesta

17

Esto podría no serle útil si está atascado usando 2.12.1, pero parece que agregaron el método de anotación a minitest/mock en HEAD here.

Por lo tanto, eran que actualice a CABEZA minitest, creo que se podría hacer esto:

product = Product.new 
Product.stub(:find, product) do 
    assert_equal product, Product.find(1) 
end 
+0

¿Cómo se actualiza a minitest HEAD? (¡gracias!) – mpelzsherman

+0

Parece que etiquetaron una nueva versión desde que escribí esto, por lo que no es necesario actualizar a HEAD. La versión más reciente está en 3.5.0 ahora. Si usas bundler, puedes actualizar minitest asegurándote de tener una línea como esta en tu Gemfile: 'gem 'minitest', '3.5.0''. Si quisieras trabajar con la versión HEAD, tendrías esto en tu Gemfile en su lugar: 'gem 'minitest',: git => 'git: // github.com/seattlerb/minitest.git''. Si no estás usando Bundler, creo que 'gem update minitest' debería hacerlo. – Adam

+0

Solo para aclarar: esto no es exactamente equivalente a la solución mocha en la pregunta: Los parámetros de la llamada '.find' no se verifican con esta solución ... – severin

Cuestiones relacionadas