그룹 및 사용자 모델이 있습니다. 사용자는 그룹에 속하며 그룹에는 많은 사용자가 있습니다.몽고 이드가 작동하지 않는 것을 발견 했습니까?
Rspec을 사용한 통합 테스트를 작성 중입니다. 하나 이상의 그룹이있는 그룹은 그룹이 삭제되지 않습니다.
공장 :
FactoryGirl.define do
factory :group_with_users do
name 'Demo group'
ignore do
users_count 2
end
after(:create) do |group, evaluator|
FactoryGirl.create_list(:user, evaluator.users_count, group: group)
end
end
end
사양 :
require 'spec_helper'
feature 'admin can manage groups' do
background do
@group_spec = FactoryGirl.create(:group_with_users)
visit groups_path
end
scenario "don't delete group because it's not empty (there are users)" do
page.should have_text(@group_spec.name)
# DEBUGGING
binding.pry
click_link 'Delete'
page.should have_text('Not deleted')
page.should have_text(@group_spec.name)
end
end
그룹 컨트롤러 :
def destroy
@group = Group.find(params[:id])
# DEBUGGING
binding.pry
msg = if @group.users.size > 1
'Not deleted'
else
@group.delete
'Deleted'
end
redirect_to groups_path, notice: msg
end
문제는 그룹이 삭제되고 있습니다.. 그래서 코드를 디버깅하기로 결정했습니다 (#DEBUGGING 스펙 및 컨트롤러 참조).
@group.users.size
>> 0
두 객체 비교 : 컨트롤러
@group_spec.users.size
>> 2
하지만 :
사양에서@group === @group_spec
>> true
EDIT : 사양 디버깅 :
Group.find(@group_spec._id).users.size
>> 0
추 신 : "datamodel"은 좀 더 복잡합니다. 그러나 그것은 그 아이디어입니다.
절대 사용하지 마십시오 '삭제' – apneadiving
오! 왜? ... 나는 Mongoid :: Paranoia 모듈을 사용하고 있으므로 문서를 부드럽게 제거하고 있습니다. – cortex
'delete'는 콜백을 트리거하지 않습니다. btw, 나는 추측한다 :'@ group_spec.valid? => false' – apneadiving