2009-01-28 12 views
5

¿Existe una forma incorporada de especificar las afirmaciones en Rails que arrojarán una excepción si un invariante se rompe durante el desarrollo y la prueba?¿Assets in Rails desde modelos o controladores?

Editar: Para que quede claro, estoy buscando afirmaciones que se pueden colocar en modelos o controladores en lugar de afirmar que se utilizarían para pruebas unitarias.

Respuesta

9

Hay muchas funciones de afirmación si está escribiendo pruebas. Pero para assertiona en el código principal, no hay ninguno y usted puede enrollar el suyo fácilmente.

Añadir algo como esto para environment.rb:

class AssertFailure < Exception 
end 

def assert(message = 'assertion failed') 
    unless block_given? and yield 
    raise message 
    end 
end 

y convertirlo en un no-op en su environments/production.rb por lo que hay una mínima sobrecarga

def assert(message = 'assertion failed') 
end 

Luego, en el código, se puede afirmar que el contenido de su corazón:

assert { value == expected_value } 
assert('value was not what was expected') { value == expected_value } 

Si value no es igual a expected_value y no se está ejecutando en producción, se generará una excepción.

+0

No estoy seguro de si el método assert pretende ser un método de la clase AssertFailure anterior o no. No parece que debería, pero si uso ese código, aparece el error "inesperado $ end, expecting keyword_end". ¿Puede explicar e indicar si es necesario/incluir para el uso, por favor? (también parece una parte de la implementación de la aplicación, ¿el directorio config es un lugar apropiado para dicho código?) – DavidJ

+0

Creo que debe haber una línea 'final' inmediatamente después de la línea' class'. – dubek

+0

¿Puedes explicarnos qué hace allí la declaración de la clase? ¿cómo entra en juego? –

1

Más allá de these, quieres decir?

+0

Creo que el OP está hablando de afirmaciones en el código principal, en comparación con las afirmaciones de prueba. –

+0

Difícil de decir, ¿verdad? :) –

+0

un poco, sí;) –

Cuestiones relacionadas