Ich erstelle eine App, die mit einem Frontend interagieren wird, um es an eine db zu senden. Auf meinem Lösch-Endpunkt wird im Terminal der Datensatz als gelöscht angezeigt. Aber in meinem Test zeigt es sich immer noch wie dort. Hier ist mein Test ...Rails löscht den Datensatz im Terminal, aber RSpec zeigt immer noch den Datensatz an, der dort ist
it 'can delete just one favorite leaving the rest' do
user = create(:user)
vid = video_payload
vid_2 = video_payload_2
post "/api/v1/users/#{user.id}/favorites/#{vid[:id]}", params:video_payload
post "/api/v1/users/#{user.id}/favorites/#{vid_2[:id]}", params:video_payload_2
expect(user.favorites.length).to eq(2)
expect(user.favorites[1].video_id).to eq(vid_2[:id].to_i)
delete "/api/v1/users/#{user.id}/favorites/#{vid[:id]}"
expect(user.favorites.length).to eq(1)
expect(user.favorites[0].video_id).to eq(vid_2[:id].to_i)
end
Die Erwartungen nach dem Löschen sind diejenigen, die scheitern.
def destroy
# user = User.find(params[:id])
# favorite = Favorite.find_by(user_id: params[:id], video_id: params[:video_id])
# render json: Favorite.delete(favorite.id)
user = User.find(params[:id])
favorite = Favorite.find_by(user_id: params[:id], video_id: params[:video_id])
user.favorites.delete(favorite) if favorite
end
Ich habe diese zwei Möglichkeiten versucht, den Datensatz (die kommentiert und die unkommentiert)
Favorit ist eine Verbindungen zwischen Benutzern und einer anderen Tabelle zu löschen. Es ist eine Beziehung von vielen zu vielen. Ich habe es mit dem abhängigen Zerstören an anderen Tischen und Benutzern versucht und ohne immer noch den gleichen Fehler.
Haben Sie versucht, das Benutzerobjekt in der Spec-Nachladen nur um sicher zu sein? Sie können etwas wie 'user.reload.favorites.length' versuchen. –
@DerekHopper Das hat den Trick gemacht! Vielen Dank. Wenn Sie die Antwort einreichen, kann ich sie akzeptieren, damit Sie den Kredit bekommen: D Ich habe das im Terminal gemacht, aber nicht bemerkt, dass es im Test gemacht werden konnte. Ich werde jetzt darüber nachlesen. Danke noch einmal. –