1

私はすべてのテストに合格して、MichaelHartlのRubyonRailsチュートリアルをすべて実行しました。今、私は戻って自分のニーズに合うようにサイトに変更を加えていますが、「このセクションのテストは合格していません」ほどカットアンドドライではありません。Hartlの「Micropost」オブジェクトに強く基づいた新しい「Charity」オブジェクトを作成しました。唯一の違いは、「コンテンツ」を持つ代わりに、オブジェクトに、、:nameおよび:descriptionが含まれること:summaryです。

これは、失敗しているテスト(具体的には「it {should be_valid}」)のコードであり、次の場所にあり/charity_spec.rbます。

require 'spec_helper'

    describe Charity do

      let(:user) { FactoryGirl.create(:user) }
      before { @charity = user.charities.build(summary: "Lorem ipsum") }

      subject { @charity }

      it { should respond_to(:name) }
      it { should respond_to(:user_id) }
      it { should respond_to(:summary) }
      it { should respond_to(:description) }
      it { should respond_to(:user) }
      its(:user) { should == user }
      it { should be_valid }
      ...

テストは実際には最初は合格ですが、検証をcharity.rbファイルに追加すると、検証が返されます。

 Failures:
   1) Charity
      Failure/Error: it { should be_valid }
         expected valid? to return, true, got false
         ...

これがcharity.rb

class Charity < ActiveRecord::Base
  attr_accessible :name, :description, :summary
  belongs_to :user

  validates :name, presence: true, length: { maximum: 40 }
  validates :summary, presence: true
  validates :description, presence: true
  validates :user_id, presence: true

  default_scope order: 'charities.created_at DESC'
end

ばかげているとは思いますが、理解が弱いので何が悪いのかわからず、工場の調子が悪い気がしますが、よくわかりません。

これが私のチャリティーファクトリーですfactories.rb

factory :charity do
    name "Lorem ipsum"
    summary "Lorem ipsum"
    description "Lorem ipsum"
    user
end

、、、および検証をから削除する:nameと、テストに合格します。良い尺度として、これが私の始まりです::summary:descriptioncharity.rbuser.rb

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation 
  has_secure_password
  has_many :charities
  has_many :microposts, dependent: :destroy
4

1 に答える 1

0

あなたの工場を使って適切な慈善団体を作りましょう:

before { @charity = user.charities.build(FactoryGirl.attributes_for(:charity)) }

次のように設定されていない属性の存在を検証したため、失敗しましたname

FactoryGirlの背景がもっと必要な場合は、彼らのドキュメントは本当に良いです。

于 2012-09-27T15:06:10.653 に答える