2016-11-09 15 views
0

私の先生用のアプリには、セミナーからクラスを削除する方法が含まれていますが、そのクラスのレコードを結合テーブルから削除することによってクラスを削除します。学生を直接削除するのではなく、学生/セミナーの参加表のレコードである「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が含まれています。

答えて

0

それはモデルをリロードする必要があるケースでした。

@seminar.reload 
関連する問題