我正在创建一个应用程序,它将与前端交互以发布到数据库。在我的删除端点上,在终端中它将记录显示为已删除。但在我的测试中它仍然显示在那里。这是我的测试...
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
删除后的期望是失败的。
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
我尝试过这两种方法来删除记录(注释掉和未注释)
收藏夹是用户与另一个表之间的连接。它是一对多关系。我已尝试使用其他表和用户的依赖销毁,但没有相同的错误。
答案 0 :(得分:3)
在你的规范中,你有这个:
expect(user.favorites.length).to eq(1)
试试这个。在检查收藏夹长度之前重新加载用户对象。
expect(user.reload.favorites.length).to eq(1)
Rails使用ActiveRecord::Associations::CollectionProxy
来跟踪关联。当您第一次获取它时,它会缓存结果。 reload
会确保您获得最新结果。
请参阅:http://api.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html