2012-04-16 76 views
5

为了调试一个工厂,我在一个问题行的末尾插入rescue binding.pry如何在Factory Girl Rails中使用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

该代码被称为一个黄瓜特征的背景的一部分:

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

factory_girl_railsfactory_girl/step_definitions.rb由支撑脚本必需的。

+0

我认为回调块只有一个参数。无论如何,您可以将'binding.pry'移动到救援块,将其放在第二行上方,看看会发生什么。 – luacassus 2012-04-16 13:02:28

+0

你能告诉我们你到底要做什么吗? – luacassus 2012-04-16 13:04:51

+0

@luacassus:回购有两个参数[示例](https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md)。 – l0b0 2012-04-16 13:06:44

回答

12

为了允许属性名称定义不带block参数的属性,factory_girl使用instance_eval评估定义块并取消定义Object上的大多数私有方法,包括binding。这意味着当您拨打上面的binding.pry时,您不会在该块的绑定上调用pry;相反,您正在定义一个名称为“binding”的新属性,并在创建的属性定义上调用pry

您可以使用Kernel.binding.pry来解决此问题。

+0

谢谢你。这一直困扰着我一段时间:) – josh 2017-04-26 15:30:59

相关问题