2012-04-16 4 views
5

Для того, чтобы отладить завод я вставил rescue binding.pry в конце проблемной линии:Как использовать Pry внутри Factory Girl Rails?

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

К сожалению, в результирующем FactoryGirl::Declaration::Implicit контексте я не могу показаться, чтобы получить доступ к контексту, как я бы в «нормальном "код (NameError: undefined local variable or method `proxy' for #<FactoryGirl::Declaration::Implicit:0x0...>). Как проверить и обработать my_object и proxy в рамках сессии Pry?

код вызывается как часть фона признака огурца:

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

factory_girl_rails и factory_girl/step_definitions.rb требуются сценарии поддержки.

+0

Я думаю, что блок обратного вызова принимает только один аргумент. В любом случае вы можете переместить 'binding.pry' форму блока спасения, поставить его над второй строкой и посмотреть, что произойдет. – luacassus

+0

Не могли бы вы рассказать, что именно вы собираетесь достичь? – luacassus

+0

@luacassus: у репо есть [пример] (https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md) с двумя аргументами. – l0b0

ответ

12

Для того чтобы имена атрибутов для определения атрибутов, не имея аргумент блока, factory_girl оценивает блок определения с помощью instance_eval и undefines большинства частных методов на Object, в том числе binding. Это означает, что когда вы вызываете binding.pry выше, вы не вызываете pry на привязку для этого блока; вместо этого вы определяете новый атрибут с именем «привязка» и вызываете pry по определению созданного атрибута.

Вы можете обойти это, используя вместо этого Kernel.binding.pry.

+0

Спасибо. Это некоторое время преследовало меня :) – josh

Смежные вопросы