如何在Factory Girl Rails中使用Pry?

14

我为了调试一个工厂,已经在一个有问题的行末插入了 rescue binding.pry

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...>)。如何在Pry会话中检查和操作my_objectproxy

该代码作为Cucumber特性的背景的一部分被调用:

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

factory_girl_railsfactory_girl/step_definitions.rb 是支持脚本所需的。


我认为回调块只需要一个参数。无论如何,您可以将 binding.pry 从 rescue 块中移动到第二行上方,看看会发生什么。 - luacassus
你能告诉我们你具体要实现什么吗? - luacassus
@luacassus:该仓库有一个示例,其中包含两个参数。 - l0b0
@luacassus:在失败的代码行上方放置binding.pry没有任何明显的区别 - my_object仍然不可用。 - l0b0
你确定你正在使用 Factory.create 而不是 Factory.build 或其他方法吗? - luacassus
应该是 create - 我们正在使用 Cucumber helpers - l0b0
1个回答

29
为了允许属性名称来定义属性而不需要块参数,factory_girl 使用 instance_eval 来评估定义块,并取消定义大多数私有方法(包括 binding)在 Object 上。这意味着,当你调用上面的 binding.pry 时,你并没有在该块的绑定上调用 pry;相反,你正在定义一个名为 "binding" 的新属性并在创建的属性定义上调用 pry
你可以通过使用 Kernel.binding.pry 来解决这个问题。

2
谢谢你。这个问题困扰了我一段时间了 :) - josh
1
以防万一,如果有人想知道,它也可以与byebug一起使用。 Kernel.binding.byebug - Gustavo de Geus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接