1

テスト環境でのイベントの作成に問題があると思います。

ブラウザでナビゲートすると、すべて問題ありません。

私が得る2つのエラーは次のとおりです。

 1) Error:
test_should_post_save_period(PeriodRegistrationsControllerTest):
NoMethodError: undefined method `event' for nil:NilClass

 2) Error:
test_should_get_index(PeriodsControllerTest):
ActionView::Template::Error: undefined method `name' for nil:NilClass

エラー1テスト:

  def setup
    @period_registration= FactoryGirl.create(:period_registration)
  end
  test "should post save_period" do
    sign_in(FactoryGirl.create(:user))
     assert_difference('PeriodRegistration.count') do
      post :save_period, period_registration: FactoryGirl.attributes_for(:period_registration)
    end
    assert_not_nil assigns(:period_registration)

    # assert_response :success
  end

エラー2テスト:

 test "should get index" do
        sign_in(FactoryGirl.create(:user, admin: true))
        get :index
        assert_not_nil assigns(:periods)
        assert_response :success
      end

エラー番号1は、コントローラーでのこのアクションに対応しています。

 def save_period
    @period_registration = PeriodRegistration.new(params[:registration])
    @period_registration.save
    flash[:success] = "Successfully Registered for Session."
    redirect_to event_url(@period_registration.period.event) #problem line
  end

2番目のエラーは、私の見解では次の行に対応しています。

<h6><%= period.event.name %> in <%= period.event.city %>, <%= period.event.state%></h6>

これが私のイベントファクトリーです:

  factory :event do
    name 'First Event'
    street '123 street'
    city 'Chicago'
    state 'Iowa'
    date Date.today
  end

 factory :period do
    name 'First Period'
    description 'This is a description'
    start_time Time.now + 10.days
    end_time Time.now + 10.days + 2.hours
    event
    product
  end

factory :period_registration do
    user
    period
  end

そして、私のイベントモデルは次のようになります。

# == Schema Information
#
# Table name: events
#
#  id         :integer         not null, primary key
#  name       :string(255)
#  date       :date
#  street     :string(255)
#  city       :string(255)
#  state      :string(255)
#  created_at :datetime        not null
#  updated_at :datetime        not null
#

class Event < ActiveRecord::Base
  attr_accessible :city, :date, :name, :state, :street
  has_many :periods

  validates :name, presence: true
  validates :street, presence: true
  validates :city, presence: true
  validates :state, presence: true
end

これが私の生理モデルです:

# == Schema Information
#
# Table name: periods
#
#  id          :integer         not null, primary key
#  name        :string(255)
#  event_id    :integer
#  created_at  :datetime        not null
#  updated_at  :datetime        not null
#  start_time  :time
#  end_time    :time
#  description :text
#  product_id  :integer
#

    class Period < ActiveRecord::Base
      attr_accessible :event_id, :name, :time, :start_time, :end_time, :description, :product_id
      belongs_to :event
      belongs_to :product
      has_many :period_registrations

      validates_time :end_time
      validates_time :start_time
      validates_presence_of :name
      validates_presence_of :start_time
      validates_presence_of :end_time
      validates_presence_of :description
    end

これを引き起こしている可能性があるものについてのアイデアはありますか?

4

2 に答える 2

2

FactoryGirl.attributes_for(:period_registration){}(空のハッシュ)を返すからだと思います。Railsコンソールで確認できます。また、コードにタイプミスがあります。テストでは送信しますperiod_registration: FactoryGirl.attributes_for(:period_registration)が、コントローラーでは期待しparams[:registration]ます。これにより、空のPeriodRegistrationモデルがdbに作成されます。このモデルにはevent_idが含まれておらず、モデルからイベントを要求すると、nilが返されます。

なぜこの種のテストにモックを使用しないのですか?

于 2012-09-01T06:09:03.003 に答える
0

ユーザーモデルのファクトリが不足しているためだと思います

于 2012-09-01T05:31:42.063 に答える