0

问题

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

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

event_parent.events.size.should == 1

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

我试过的

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

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

相关代码

事件父模型

class EventParent < ActiveRecord::Base
  has_many :events
end

事件模型

class Event < ActiveRecord::Base
  belongs_to :event_parent
end
4

2 回答 2

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
于 2013-07-31T09:56:32.877 回答
0

我要回答我自己的问题。

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

我已经删除了测试。

于 2013-07-31T09:53:22.567 回答