我有组和用户模型。用户属于Group,Group拥有多个用户。Mongoid找不到工作?
我正在用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_spec.users.size
>> 2
但在控制器:
@group.users.size
>> 0
比较两个对象:
@group === @group_spec
>> true
编辑: 在规范的调试:
Group.find(@group_spec._id).users.size
>> 0
PS:“datamodel”有点复杂。但是,这是主意。
绝不使用'delete' – apneadiving 2013-04-26 15:23:09
哦!为什么? ...我使用Mongoid :: Paranoia模块,所以我软删除文档。 – cortex 2013-04-26 15:27:35
'delete'不会触发回调。顺便说一句,我猜:'@ group_spec.valid? =>假' – apneadiving 2013-04-26 15:30:41