如何使用没有命中数据库的Factory Girl在Rails中测试关系?

时间:2013-07-31 09:13:22

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

问题

我希望能够执行以下测试,但它失败了,因为我正在使用构建事件而不是创建;

event_parent = build(:event_parent)
event = build(:event, event_parent: event_parent)

event_parent.events.size.should == 1

我真的不想使用create,因为a)它比较慢而且b)构建事件的工厂有一些关联和事情,我真的不想担心它们在测试数据库中。

我尝试了什么

我(错误地)假设我在event_parent模型上创建了一个返回其事件的方法,然后它可以在模型层而不是数据库层执行此操作。

我还将构建更改为事件的创建,这可行,但正如我所说,对我的测试套件的其余部分有一些不良副作用。

相关代码

EventParent模型

class EventParent < ActiveRecord::Base
  has_many :events
end

活动模型

class Event < ActiveRecord::Base
  belongs_to :event_parent
end

2 个答案:

答案 0 :(得分:1)

如果您想使用ActiveRecord指定关系,请查看shoulda-matchers gem

describe Event do
  let(instance) { Event.new }

  it { expect(instance).to belong_to(:event_parent) }
end

describe EventParent do
  let(instance) { EventParent.new }

  it { expect(instance).to have_many(:events) }
end

答案 1 :(得分:0)

我将回答我自己的问题。

这很难的原因是因为我正在测试Rails,而不是我的应用。

我删除了测试。