私は2つのモデルを持っています:LessonBookingとCustomerRequests
LessonBooking が支払われると、関連する CustomerRequest が予約済みとしてマークされます。注: LessonBooking は ID を介して直接関連付けられていませんが、顧客は支払い時に電子メールを入力します。この電子メールは、見つかった場合に「予約済み」としてマークされている既存の顧客のリクエストを確認するために使用されます。ここでは、lesson_booking.rb 内の関連するコードを示します。
event :payment_received do
transition :form_started => :paid
end
after_transition :form_started => :paid do |booking|
email = booking.teaching_relationship.student.account.email
customer_request = CustomerRequest.find_by_email(email)
unless customer_request.nil?
customer_request.book
end
end
CustomerRequest モデル自体にも、次に示すようにイベント「book」を持つステート マシンがあります。
event :book do
transition [:new, :opened, :awaiting_response] => :booked
end
ここで、「form_started」から「paid」への LessonBooking の遷移と、それに続く「new」から「booked」への CustomerRequest の遷移をテストする仕様に合格することができません。
ここに私が書いた仕様があります:
context 'when there is an associated customer request' do
before :each do
@student = create(:student)
relationship = create(:teaching_relationship, student: @student)
@new_booking = create(:lesson_booking, teaching_relationship: relationship)
@customer_request = create(:customer_request, student: @student, email: @student.account.email )
end
it "it changes the state of the customer request" do
@new_booking.payment_received
expect(@customer_request.state).to eq 'booked'
end
end
終わり
私のテストは常に次のメモで失敗します。
expected: "booked"
got: "new"
私は一般的にテストすることを知っており、助けていただければ幸いです。