Ruby on Rails 2.3.8:Factory_girl:全局变量在工厂构建过程中不保持值?

发布于 2024-11-16 10:00:15 字数 385 浏览 1 评论 0原文

  setup do
     @user = Factory.build(:user)
  end

因此,在单元测试的顶部,我有上述内容。

在我的单元测试中,我做了 Factory.build(:object)

但在工厂本身中,它说 NoMethodError: undefined method my_attribute for nil:NilClass

我的工厂:

Factory.define :object |o| do
   o.my_attribute @user.my_attribute
end

但@user 为零=\

  setup do
     @user = Factory.build(:user)
  end

so, at the top of my unit test, I have the above.

And in my unit tests, I do Factory.build(:object)

but in the factory itsself, it is saying NoMethodError: undefined method my_attribute for nil:NilClass

my factory:

Factory.define :object |o| do
   o.my_attribute @user.my_attribute
end

but @user is nil =\

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟若柳尘 2024-11-23 10:00:16

@user 不是全局变量。它是一个实例变量。在本例中,@user 是测试套件的实例变量。传递给 Factory.definedo...end 块不在测试套件的上下文中运行,因此它将具有不同的 self 和不同的实例变量。相反,您需要将属性值传递给工厂:

setup do
  @user = Factory.build(:user)
  Factory.build(:object, :my_attribute => @user.my_attribute)
end

@user is not a global variable. It is an instance variable. In this case, @user is an instance variable of the test suite. The do...end block passed to Factory.define is not run within the context of the test suite, therefor it will have a different self and different instance variables. Instead, you need to pass the attribute value to the factory:

setup do
  @user = Factory.build(:user)
  Factory.build(:object, :my_attribute => @user.my_attribute)
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文