2012-04-16 11 views
5

Con el fin de depurar una fábrica he insertado rescue binding.pry al final de una línea problemática:¿Cómo usar Pry dentro de Factory Girl Rails?

after_create do |my_object, proxy| 
    my_object.foreign_key_id = proxy.generated_attribute rescue binding.pry 

Desafortunadamente, dentro del contexto resultante FactoryGirl::Declaration::Implicit Me parece que no puede acceder al contexto como lo haría en "normal "código (NameError: undefined local variable or method `proxy' for #<FactoryGirl::Declaration::Implicit:0x0...>). ¿Cómo inspecciono y manipulo my_object y proxy dentro de la sesión de Pry?

El código se llama como parte del fondo de una función Pepino:

Given the following my_objects exist: 
| property | 
| value | 

factory_girl_rails y factory_girl/step_definitions.rb son requeridos por el guión de apoyo.

+0

Creo que el bloqueo de devolución de llamada solo tiene un argumento. De todos modos, podrías mover el archivo 'rescue.pry' del bloque de rescate, ponerlo encima de la segunda línea y ver qué pasa. – luacassus

+0

¿Podría decirnos qué es exactamente lo que va a lograr? – luacassus

+0

@luacassus: el repositorio tiene un [ejemplo] (https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md) con dos argumentos. – l0b0

Respuesta

12

Con el fin de permitir que los nombres de atributos para definir atributos sin tener un argumento bloque, factory_girl evalúa el bloque de definición utilizando instance_eval y undefines métodos más privados en Object, incluyendo binding. Eso significa que cuando llama al binding.pry anterior, no está llamando al pry en el enlace de ese bloque; en su lugar, está definiendo un nuevo atributo con un nombre de "vinculante" e invocando pry en la definición del atributo creado.

Puede evitar esto usando Kernel.binding.pry en su lugar.

+0

Gracias por esto. Esto me había estado persiguiendo por un tiempo ahora :) – josh

Cuestiones relacionadas