2012-02-20 14 views
58

que estoy tratando de probar el siguiente método:Rubí Rspec: Prueba de variables de instancia y sin la adición de un descriptor de acceso a la fuente

def unprocess_move(board, move) 
    if move[0].instance_of?(Array) 
    multi_move = @multi_move.pop(2).reverse 
    multi_move.each do |single_move| 
     unapply_move(board, single_move) 
    end 
    else 
    board = unapply_move(board, move) 
    end 
    board 
end 

donde quiero establecer el estado de @multi_move, pero yo no quiero agregue un accesorio solo para probar. ¿Hay alguna manera de hacerlo sin el accesorio? Gracias.

Respuesta

104

Puede utilizar Object#instance_variable_get método para obtener el valor de cualquier variable de instancia del objeto de esa manera:

class Foo 
    def initialize 
    @foo = 5 # no accessor for that variable 
    end 
end 

foo = Foo.new 
puts foo.instance_variable_get(:@foo) 
#=> 5 

Y Object#instance_variable_set se puede utilizar para establecer la instancia valores de las variables:

foo.instance_variable_set(:@foo, 12) 
puts foo.instance_variable_get(:@foo) 
#=> 12 
+0

pero necesito configurarlo de antemano dentro de mi prueba. No tiene un valor antes de probarlo. –

+1

@steve_gallagher, eche un vistazo a los documentos. Hay 'instance_variable_set' justo al lado de' instance_variable_get' (ejemplo agregado y enlace a los documentos de la respuesta). –

+0

Interesante. No sabía que podrías entrar y establecer y obtener cualquier variable de instancia como esa. Sin embargo, he visto muchas pruebas de RSpec y nunca he visto llamar a esos métodos. Parece una forma no estándar de manejar lo que creo que sería una situación bastante típica. No me quejo, sin embargo, gracias por la respuesta. –

Cuestiones relacionadas