2012-04-16 12 views
5

Um eine Fabrik zu debuggen ich rescue binding.pry am Ende einer problematischen Zeile eingefügt habe:Wie Pry in Factory Girl Schienen zu verwenden?

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

Leider im Innern des resultierenden FactoryGirl::Declaration::Implicit Kontext scheinen kann ich nicht den Kontext zugreifen, wie ich würde in „normalen "Code (NameError: undefined local variable or method `proxy' for #<FactoryGirl::Declaration::Implicit:0x0...>). Wie überprüfe und manipuliere ich my_object und proxy innerhalb der Pry-Sitzung?

Der Code wird als Teil des Hintergrunds einer Gurke Funktion namens:

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

factory_girl_rails und factory_girl/step_definitions.rb werden durch den Support-Skript erforderlich.

+0

Ich denke, dass Callback-Block nur ein Argument dauert. Wie auch immer, du könntest 'binding.pry' aus dem Rettungsblock ziehen, über die zweite Zeile legen und sehen, was passiert. – luacassus

+0

Können Sie uns sagen, was genau Sie erreichen werden? – luacassus

+0

@luacassus: Der Repo hat ein [Beispiel] (https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md) mit zwei Argumenten. – l0b0

Antwort

12

Um Attributnamen zu ermöglichen Attribute zu definieren, ohne einen Block Argument hat, wertet den factory_girl Definitionsblock instance_eval und undefines meisten privaten Methoden auf Object verwenden, einschließlich binding. Das heißt, wenn Sie oben binding.pry anrufen, rufen Sie nicht pry auf die Bindung für diesen Block; Stattdessen definieren Sie ein neues Attribut mit dem Namen "binding" und rufen pry für die erstellte Attributdefinition auf.

Sie können dies umgehen, indem Sie stattdessen Kernel.binding.pry verwenden.

+0

Danke dafür. Das hat mich schon eine Weile verfolgt. – josh

Verwandte Themen