2012-04-16 11 views
5

W celu debugowania fabrykę mam wstawiony rescue binding.pry na koniec problematycznej line:Jak korzystać z Pry w ramach Factory Girl Rails?

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

Niestety, wewnątrz powstałej kontekście FactoryGirl::Declaration::Implicit I nie może wydawać się uzyskać dostęp do kontekstu jak bym w „normalnym "kod (NameError: undefined local variable or method `proxy' for #<FactoryGirl::Declaration::Implicit:0x0...>). Jak mogę kontrolować i manipulować my_object i w ramach sesji Pry?

Kod jest nazywany jako część tle cechą Ogórek:

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

factory_girl_rails i factory_girl/step_definitions.rb są wymagane przez skrypt wsparcia.

+0

Myślę, że blok oddzwaniany przyjmuje tylko jeden argument. W każdym razie możesz przenieść 'binding.pry' z bloku ratunkowego, umieścić go powyżej drugiej linii i zobaczyć, co się stanie. – luacassus

+0

Czy możesz nam powiedzieć, co dokładnie zamierzasz osiągnąć? – luacassus

+0

@luacassus: repo ma [przykład] (https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md) z dwoma argumentami. – l0b0

Odpowiedz

12

Aby umożliwić atrybutom definiowanie atrybutów bez konieczności podawania argumentu blokowego, factory_girl ocenia blok definicji za pomocą instance_eval i nie definiuje większości prywatnych metod na Object, w tym binding. Oznacza to, że gdy zadzwonisz pod numer binding.pry powyżej, nie wywołujesz pry w powiązaniu dla tego bloku; zamiast tego definiujesz nowy atrybut o nazwie "binding" i wywołuje pry w definicji utworzonego atrybutu.

Możesz to obejść, używając zamiast tego Kernel.binding.pry.

+0

Dzięki za to. To mnie prześladowało od jakiegoś czasu :) – josh