Time を使用して、作業中のイベント コントローラー内で開始日と終了日を保持しています。ただし、私のアプリケーションは、ブラウザーと Rspec テストの両方で、テスト環境と開発環境の両方で時間情報を送信することを怠っています。時間が作成されているように見えますが、これに関するすべてのテストで戻ってくるのは、一貫して 2000 年 1 月 1 日午前 12 時です。
誰でも問題の特定を手伝ってもらえますか?
次のテストは別の理由で失敗しています (この点については心配しないでください) が、問題の程度を示しています。テストで送信された end_time は、2000 年 1 月 1 日午前 12:00 ではありませんでした。
失敗:
1) EventsController GET は、終了日/時刻 (オプション フィールド) が指定されている場合、サインイン時に表示されます。複数日のイベントの表示には終了日が表示されます
失敗/エラー: response.should have_selector("span", :class => "end_time_date", 次の出力には、Saturday, 01 January 2000 タグが含まれていると予想されます。
... [div class="start"] Starts: Saturday, 01 January 2000 at 12:00 AM [/div] [div class="end"] Ends [span class="end_time_time"] 12:00 AM [/span] [/div]
上記で失敗しているテスト:
describe "display for a multi-day event" do before(:each) do # Turn example event into one that spans multiple days. @event.end_time.advance(:days => 2) end it "shows an end date" do get :show, :id => @event @human_friendly_end_date = @event.end_time.strftime("%A, %d %B %Y") response.should have_selector("span", :class => "end_time_date", :content => @human_friendly_end_date) end it "shows an end time" do get :show, :id => @event @human_friendly_end_time = @event.end_time.strftime("%I:%M %p") response.should have_selector("span", :class => "end_time_time", :content => @human_friendly_end_time) end end
start_time および end_time 属性が非常にアクセスしやすく、(この時点での start_date の場合) 必須であることがわかるモデル:
class Event < ActiveRecord::Base
belongs_to :user
attr_accessible :name, :description, :start_time, :end_time,
:max_attendees, :min_attendees, :event_type_id
validates :name, :presence => true, :length => { :minimum => 4, :maximum => 140 }
validates :description, :length => { :minimum => 4, :maximum => 1000 }
validates :start_time, :presence => true
#validates :end_time, :presence => true
validates :user_id, :presence => true
end
同じ問題がブラウザ内で発生しているため、FactoryGirl イベントの生成は関係ないように見えますが、念のためここにも含めておきます。日付/時刻を作成するために数値をハードコーディングしようとしたことがわかります (これのコメントアウトされた部分から)。しかし、これは何も修正しませんでした。
Factory.define :event do |event|
event.name "Foo bar"
event.description "Yada yada"
event.association :user
week_num = (rand(10) +1)
day_num = (1+rand(30))
hour_num = (1+rand(12))
hours_duration_num = (1+rand(4))
future_date = week_num.weeks.from_now
#event.start_time "2012,8,5,6"
#event.end_time "2012,8,5,7"
event.start_time "#{future_date.year},#{future_date.month},#{day_num},#{hour_num}"
event.end_time "#{future_date.year},#{future_date.month},#{day_num},#{hour_num+hours_duration_num}"
end
私の移行:
class CreateEvents < ActiveRecord::Migration
デフセルフアップ
create_table :events do |t| #foreign key first t.references :event_type t.integer :user_id t.string :name, :null => false t.text :description, :null => false t.time :start_time, :null => false t.time "end_time" t.timestamps end
いやー!どうしたの?!