0

問題

次のテストを実行できるようにしたいのですが、作成ではなくビルドをイベントに使用しているため失敗します。

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
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 に答える