【问题标题】:FactoryGirl "create_list" not saving to databaseFactoryGirl“create_list”不保存到数据库
【发布时间】:2014-01-23 17:10:01
【问题描述】:

我在 FactoryGirl 中看到了一些似乎与文档相矛盾的奇怪行为。在 Rspec 测试中,如果我这样做;

static_groups = FactoryGirl.create_list(:static_group,5)
expect(StaticGroup.count).to eq(5)                                                              

测试失败(预期:5,得到:0)。如果我添加显式保存的记录;

static_groups = FactoryGirl.create_list(:static_group,5)
static_groups.each do |grp|
  grp.save
end
expect(StaticGroup.count).to eq(5)                                                              

测试通过了!我认为 factorygirl 中的“创建”应该为您保存,但在这种情况下,它显然不是保存可以在之后立即保存的记录!更奇怪的是,如果我在第一个示例中询问对象(我没有进行显式保存),它们都有 id,所以它们肯定一直在与数据库对话!

编辑

在有人指出狡猾的“计数”语法之前,我使用 DataMapper 作为 ORM,这是一种有效的计数方式 :)

【问题讨论】:

  • 你能显示static_group factory的定义吗?
  • test.log 中是否正在生成数据库插入?
  • 谢谢你们提示我仔细检查工厂 - 发现问题 facepalm

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


【解决方案1】:

呃——噩梦。

最终弄清楚它是什么——“StaticGroup”类使用 STI 来确定它的类型。这有点复杂,因为它连接到两个数据库,并且类结构在旧世界和新世界之间发生了变化。

长话短说,我将我的组工厂复制/粘贴到静态组工厂并忘记更改类型。 “保存”方法中有一个钩子可以为我解决这个问题,并且在 factorygirl 创建对象时它没有被触发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多