0

これが私のLessonモデルです:

before_create :set_sequence

def set_sequence
  maxseq = Lesson.where(:course_id => self.course_id).maximum("sequence")
  if (maxseq.nil?)
    maxseq = 0
  end
  self.sequence = maxseq + 1
end

rspec次のテストを実行すると失敗します。

it "validate sequence is setup" do
  lesson = Lesson.create(:title => "Testing", :description => "Testing", :course_id => 1)
  lesson.sequence.should_not eql nil
end

ただし、T でこれをテストするrails consoleと、Lessonオブジェクトは正常に作成され、正しい順序で作成されます。理由はありますか?

4

3 に答える 3

0

lesson.sequence.should_not be_nil私の知る限り、 nil をテストする正しい方法です。あなたはそれを試しましたか?

于 2012-06-06T20:05:38.760 に答える
0

FactoryGirl最初にパラメーターなしでオブジェクトを初期化し、次にパラメーターを 1 つずつ割り当てます。この場合、モデルのコールバックはおそらく機能しません。FactoryGirlしたがって、追加することで の動作を変更することができます

initialize_with { new(attributes) }

Lesson工場へ。それが役立つかどうかはわかりませんが。Rails でコールバックの動作をテストするのは注意が必要です。

于 2013-03-21T05:01:29.537 に答える
0

レッスンで取得した検証は、コールバックが呼び出される前に作成をサイレントに中止する可能性があります。create!仕様に変更して確認してください。

于 2012-06-06T20:13:24.370 に答える