He estado siguiendo la guía 15 TDD steps to create a Rails application, pero me he encontrado con un problema que no puedo resolver. Para la prueba funcional de la WordsController, tengo el siguiente código:Mocha Mock lleva a otra prueba
class WordsControllerTest < ActionController::TestCase
test "should get learn" do
get 'learn'
assert_response :success
end
test "learn passes a random word" do
some_word = Word.new
Word.expects(:random).returns(some_word)
get 'learn'
assert_equal some_word, assigns('word')
end
end
En la clase Palabra Tengo el siguiente código:
class Word < ActiveRecord::Base
def self.random
all = Word.find :all
all[rand(all.size)]
end
end
Cuando ejecuto las pruebas, experimento el siguiente error (acortado por razones de brevedad):
1) Failure: unexpected invocation: Word(...).random() satisfied expectations:
- expected exactly once, already invoked once: Word(...).random()
he intentado cambiar cambiando el orden de las pruebas, junto con una multitud de otras cosas, pero una y otra vez que continúan recibiendo los mismos tes t error: Word.random() ya se ha invocado.
Estoy ejecutando Rails 3.0 beta 4 y Mocha 0.9.8. He buscado mucho y mucho para encontrar una solución a mi problema, pero parece que no puedo encontrarlo. Soy nuevo en Ruby/Rails, así que no estoy familiarizado con el lenguaje y los frameworks.
¡Gracias de antemano!
¿Se supone que se debe llamar al desmontaje entre pruebas? – pushmatrix
Si 'Mocha' se ha cargado correctamente, habrá parcheado el marco de prueba para llamar a' Mocha :: API # mocha_verify' y 'Mocha :: API # mocha_teardown', es decir, no debería necesitar llamarlos explícitamente. La razón por la que estaba preguntando cómo se requería 'Mocha' era para determinar si las cosas se están cargando en el orden correcto, para que el parche de monos funcione correctamente. –
Si configura 'MOCHA_OPTIONS = debug' como una variable de entorno cuando ejecuta las pruebas, verá qué frameworks de pruebas están siendo parcheados con éxito. Si todavía tiene problemas con esto, dígame cuál es la salida de depuración y dígame qué versión de Mocha está utilizando. Gracias. –