2010-07-27 13 views

Respuesta

26

assert_difference verifica que el resultado de evaluar su primer argumento (una cadena que se puede pasar a eval) cambia en cierta cantidad después de llamar al bloque que se pasó. El primer ejemplo anterior se puede "desenrollar" a:

before = Post.count # technically, eval("Post.count") 
post :create, :post => { :title => 'Hi', :body => 'This is my first post.'} 
after = Post.count 
assert_equal after, before + 1 
+0

pero ¿por qué el segundo ejemplo tiene +1 mientras que el primero no tiene un segundo parámetro? ¿cuál es la diferencia? –

+0

@fayer - Creo que el valor predeterminado es '+ 1'. En el segundo ejemplo, lo están declarando explícitamente. –

+0

Sí, el valor predeterminado es 1. –

6

esto es sólo la comprobación para asegurarse de que el número de objetos para lo que se ha especificado el tipo se ha incrementado en 1. (Es una manera fácil de comprobar para ver que un objeto fue agregado a la base de datos)

1

Esta afirmación es para verificar la diferencia cierta/especificada en el primer argumento. El primer argumento debe ser una cadena, es decir, "Post.count". El segundo argumento tiene un valor predeterminado 1, también puede especificar otros números, incluso números negativos. para más detalles visite: http://api.rubyonrails.org/classes/ActiveSupport/Testing/Assertions.html

+0

informativo gracias hombre –

0

Este método es para verificar que hay una diferencia numérica entre el primer argumento y el segundo argumento. En la mayoría de los casos, el primer argumento es una cadena que es como “Post.count” y el segundo argumento es un bloque. En los rieles esto se usa principalmente en pruebas funcionales para verificar si un objeto se puede guardar en la base de datos. La lógica es que antes de que un nuevo objeto se guarde, el número de registros en esa tabla en particular debe ser diferente del número de registros después de guardar el objeto (de 1 para ser preciso).