0

私は断続的に(さまざまなプロジェクトで)rspecがActiveRecordオブジェクトをリロードし、関連するオブジェクトもクリアするという問題を抱えていました。

「動作するはず」で失敗した仕様の例は次のとおりです (テストの「良さ」は無視してください。これは単純化された例です)。

# Message has_many :message_attachments
# MessageAttachment belongs_to :message
describe Message, 'instance' do
  before(:each) do
    @it = Factory(:message)

    (1..3).each do
      @it.message_attachments << Factory(:message_attachment, :message => @it)
    end
  end

  it 'should order correctly' do
    # This test will pass
    @it.message_attachments.collect(&:id).should == [1, 2, 3]
  end

  it 'should reorder correctly' do
    @it.reorder_attachments([6, 4, 5])
    @it.reload
    # @it.message_attachments is [] now.
    @it.message_attachments.collect(&:id).should == [6, 4, 5]
  end
end
4

1 に答える 1

0

不思議なことに、これを修正するには、定義済みの親オブジェクトに関連付けられたオブジェクトを作成し、それを親オブジェクトのコレクションにアタッチする必要があります。

describe Message, 'instance' do
  before(:each) do
    @it = Factory(:message)

    (1..3).each do
      ma = Factory(:message_attachment, :message => @it)
      @it.message_attachments << ma
      ma.save
    end
  end

  it 'should order correctly' do
    @it.message_attachments.collect(&:id).should == [1, 2, 3]
  end

  it 'should reorder correctly' do
    @it.reorder_attachments([6, 4, 5])
    @it.reload
    @it.message_attachments.collect(&:id).should == [6, 4, 5]
  end
end
于 2012-06-10T23:19:19.953 に答える