0
class Horse < ActiveRecord::Base

  attr_accessible :body_scores_attributes

  has_many :body_scores, :dependent => :destroy

  accepts_nested_attributes_for :body_scores, :reject_if => :reject_body_scores

  private
  def reject_body_scores(attributed)

    new_record? || attributed['date'].blank? || attributed['score'].blank?
  end

end

class BodyScore < ActiveRecord::Base

  attr_accessible :horse_id, :score, :scoring_date
  belongs_to :horse

  validates :horse_id, :score, :scoring_date, :presence => true

end
4

1 に答える 1

0

そんな感じ:

  describe "#reject_body_scores" do
    context "when record is new" do
      let(:horse) { build :horse }
      let(:options) { {} }
      it "reject body" do
        horse.send(:reject_body_scores, options).should be_true
      end
    end

    context "when date blank" do
      let(:horse) { create :horse }
      let(:options) { {} }
      it "reject body" do
        horse.send(:reject_body_scores, options).should be_true
      end
    end

    context "when score blank" do
      let(:horse) { create :horse }
      let(:options) { { "date" => Date.current } }
      it "reject body" do
        horse.send(:reject_body_scores, options).should be_true
      end
    end

    context "when date and score present" do
      let(:horse) { create :horse }
      let(:options) { { "date" => Date.current, "score" => 5 } }
      it "don't reject body" do
        horse.send(:reject_body_scores, options).should be_false
      end
    end
  end

考えられるすべての動作をカバーする必要があります。

ここでobject.send説明されているプラ​​イベート メソッドをテストするために使用するトリックも使用しました。

upd : あなたはテストに慣れていないので、テストに関する説明を追加します。

新しいファクトリを作成するためにFactoryGirlを使用し、そのための短い構文を使用しました。

ブロックの代わりにletを使用して新しい変数を割り当てました。before

于 2012-12-23T11:30:49.530 に答える