Pregunta

Estoy usando RR para burlarse y golpearse en RSpec, y he correr a través de una situación en la que me gustaría stub un método de una superclase de un controlador que establece algunas variables de instancia. Puedo encontrar la manera de muñón de la llamada al método y si puedo depurar puedo ver que mi bloque aplastó se llama, pero no puedo obtener las variables de instancia en el bloque de propagar en la clase que estoy probando.

Sólo para descomponerlo:

class A < ApplicationController
  before_filter :bogglesnap

  def bogglesnap
    @instancevar = "totally boggled"
  end
end

class B < A
  def do_something_with_instance
    if @instancevar 
      ....
    else
      ....
    end
  end
end

Esa es la configuración básica, y así entonces en mis pruebas para el controlador B me gustaría apagar el método de la A a bogglesnap conjunto @instancevar a algo que quiero. No puedo encontrar la manera de hacerlo.

He intentado RR de instance_of stubbing y simplemente apagando la definición de controlador:

stub.instance_of(A).bogglensap { @instancevar = "known value" }
stub(controller).bogglesnap { @instancevar = "known value" }

Pero ninguna de estas parecen funcionar, así, que no funcionan:)

¿Cualquier persona tiene sugerencias sobre cómo debería ser capaz de código auxiliar que el método de llamada a cabo y la tengan variables de instancia asignadas? Estoy asumiendo que tiene que ver con el contexto en el que se ejecuta el bloque, pero estoy esperando que alguien se ha quedado con algo como esto antes.

Gracias

¿Fue útil?

Solución

Se puede utilizar el método instance_variable_set llamando en la instancia de objeto y ajustar a lo que usted quiere, al igual que

 controller.instance_variable_set("@instancevar", "known value")

y de manera similar, si alguna vez se desea obtener el valor de una variable de instancia en su especificación o de depuración o hacer otra cosa desde fuera de la clase, entonces puede obtener el valor haciendo

 controller.instance_variable_get("@instancevar")
métodos

Eso sí, instance_variable_set y instance_variable_get están disponibles no sólo a los controladores, pero todos los objetos, ya que es proporcionado por el rubí. De hecho, estos dos métodos juegan un papel importante en los carriles mágica:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top