私の先生用のアプリには、セミナーからクラスを削除する方法が含まれていますが、そのクラスのレコードを結合テーブルから削除することによってクラスを削除します。学生を直接削除するのではなく、学生/セミナーの参加表のレコードである「Aula」を削除します。学生が削除されたときに、その学生のIDも座席表の配列から削除されるようにするテストを作成しようとしています。この関数は、開発時に正しく動作しているように見えますが、テストでは正しく動作していないようです。コントローラーメソッドの後の値を元に戻す
テスト
test "Remove student from class period and seating chart" do
log_in_as(@teacher_user)
get seminar_path(@seminar)
seating = [@student.id, @other_student.id]
@seminar.update(:seating => seating)
assert_difference ['Aula.count','@student.aulas.count', '@seminar.students.count'], -1 do
delete aula_path(@aula)
end
puts "In test"
puts @seminar.seating
assert_redirected_to scoresheet_url(@seminar)
end
アウラコントローラのメソッドを破壊
def destroy
thisAula = Aula.find(params[:id])
@seminar = Seminar.find(thisAula.seminar_id)
#Remove student from seating chart
seating = @seminar.seating
seating.delete(thisAula.student_id)
@seminar.update(:seating => seating)
puts "In Controller"
puts @seminar.seating
thisAula.destroy
#Redirect
flash[:success] = "Student removed from class period"
redirect_to scoresheet_url(@seminar)
end
私はこのエラーを修正したら、私は同様に、テスト中の座席表カウントを含めたい:
assert_difference ['Aula.count','@student.aulas.count', '@seminar.students.count', '@seminar.seating.count'], -1 do
しかし、座席配列がカウントを減らしていないため、テストはそこで失敗します。
私は何が起こっているのか把握するためにそれらの "puts"行を試しました。
ありがとうございました。テストを実行-Jeff
は置く:
In Controller
614857506
In Test
45061424
614857506
これは、それがあるべきように、学生のIDが座席の配列から削除されていることを示しています。しかし、プログラムがテストに戻ると、座席アレイは元の形に戻ります。これには、削除された学生のIDが含まれています。