【问题标题】:Cannot mock an object inside an object无法模拟对象内的对象
【发布时间】:2014-03-07 00:12:27
【问题描述】:

我正在尝试使用FactoryGirl 将一个对象嵌套在另一个对象中。我有这个

# app/models/one.rb
class One < ActiveRecord::Base
    has_many :two_and_three
end

第二个模型

# app/models/two_and_three.rb
class TwoAndThree < ActiveRecord::Base
  attr_accessible :cast
  belongs_to :one
end

我试图像这样嘲笑他们:

# spec/factories/one.rb
FactoryGirl.define do
  factory :one do
    two_and_three FactoryGirl.build(:TwoAndThree)
  end
end

# spec/factories/two_and_three.rb
FactoryGirl.define do
  factory :TwoAndThree do
    cast Faker::Name.name
  end
end

我在运行测试时收到uninitialized constant TwoAndThree。如何让 FactoryGirl 在模拟对象中模拟对象?

【问题讨论】:

  • 您的第二个代码 sn-p 是否正确?它显示了One 的类名,而不是TwoAndThree

标签: ruby-on-rails ruby-on-rails-3 rspec ruby-on-rails-3.2 factory-bot


【解决方案1】:

two_and_three.rb 中的类定义不正确。它有One 而不是TwoAndThree,这就是为什么你会得到一个未初始化的常量错误。它正在自动加载文件,但结果并未定义该类。

【讨论】:

  • 其实是TwoAndThree。我的复制粘贴错误,对此感到抱歉。此外,根据堆栈跟踪,错误来自one.rb 中的two_and_three FactoryGirl.build(:TwoAndThree)
  • @AbhishekChanda 如果您遇到未初始化的常量错误并且您的模型名称是正确的,那么我唯一能想到的是您不需要spec_helper,因此没有启用自动加载。
猜你喜欢
  • 2017-12-27
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
相关资源
最近更新 更多