2009-12-11 10 views
7

Así que estoy tratando de encontrar una forma de anotar un método de controlador en rspec para una aplicación Sinatra. La razón principal para esto es probar el flujo lógico de la aplicación y asegurarse de que llama a las funciones necesarias cuando se cumplen ciertas condiciones. Así que, en esencia, quiero ser capaz de hacer algo comoAnulando un método de controlador con Sinatra y rspec

controller.should_receive(:fancy_method).and_return("This is a string") 

Lo que estoy teniendo dificultades para hacerlo está accediendo a la instancia del controlador dentro de la aplicación Sinatra. Puedo anular las funciones actuales usando un class_eval en la clase de controlador sinatra, pero me encantaría afirmar que estas funciones realmente se ejecutan.

¿Alguien tiene algún consejo?

Gracias.

Respuesta

3

Dan, creo que lo que realmente quieres es probar las acciones del controlador. Desde la perspectiva de un examinador, no debería preocuparse realmente por lo que realmente llamó sino por la salida, dada una entrada específica y quizás algunas otras condiciones especiales (es decir burlarse o anotar otras clases) (1).

Puede consultar el official documentation for Sinatra + Rack::Test o el this blog post from devver.net.

(1): si las páginas de su controlador están llamando a algunas otras clases (modelos, servicios, etc.) podría burlarse de ellas en su lugar y poner expectativas en ellas. Por ejemplo:

SomeClass.should_receive(:msg).with(:arg).and_return(:special_value) 

algo más de información por burlarse (con RSpec en este exmaple) se puede conocer en la RSpec documentation pages.

Cuestiones relacionadas