2012-04-07 10 views
17

Estoy tratando de aprender rspec. Parece que no puedo probar un método de controlador de rieles. Cuando llamo al método en la prueba, rspec solo devuelve un error de método indefinido. Aquí está mi ejemplo de prueba¿cómo pruebo el método del controlador usando rspec?

it 'should return 99 if large' do 
    GamesController.testme(1000).should == 99 
end 

y aquí está el error:

Failure/Error: GamesController.testme(1000).should == 99 
NoMethodError: 
    undefined method `testme' for GamesController:Class 

tengo un método testme en el GamesController. No entiendo por qué el código de prueba no puede ver mis métodos.

Cualquier ayuda es apreciada.

+0

¿Es un privat ¿método? – plainjimbo

Respuesta

4

intentar probar el método de la clase, pero tiene controlador método de instancia

Es necesario GamesController.new.testme(1000).should == 99

O incluso GamesController.new.send(:testme, 1000).should == 99, ya que, como yo creo, esto no es el método de acción, pero privada o protegida.

métodos de acción se prueban this way

+0

OK. Ahora veo eso. La diferencia entre los métodos de clase e instancia es una sutileza que se me escapó. Como puedes ver, todavía soy nuevo en el rubí y los rieles. Por cierto, el enlace a la documentación rspec-rails es bueno. No estaba al tanto de ese recurso. Gracias. –

25

Creo que la forma correcta es la siguiente:

describe GamesController do 
    it 'should return 99 if large' do 
    controller.testme(1000).should == 99 
    end 
end 

En una especificación de controlador de rieles, cuando se pone la clase del controlador en describe, puede utilizar controller método para obtener una instancia: P
Obviamente, si el método testme es privado, usted todavía tiene que usar controller.send :testme

+0

Muchas gracias - esto es sorprendentemente difícil de encontrar en los documentos – Andy

Cuestiones relacionadas