我在测试一种destroy
方法时遇到了一个奇怪的问题。我正在使用 FactoryGirl 和 Rspec。
下面来看看有问题的方法。如您所见,它实际上并没有破坏经销商,只需将其及其依赖对象的active
属性设置为false
:
经销商控制器.rb
def destroy
@dealer = Dealer.find(params[:id])
@dealer.active = false
@dealer.save!
@dealer.leads.each { |lead|
lead.active = false
lead.save!
}
@dealer.users.each { |user|
user.active = false
user.save!
}
redirect_to dealers_path
end
当我在应用程序中运行这个方法时,它会完全按照它应该做的事情去做。现在,开始测试。
经销商控制器规格.rb
describe "#destroy" do
context "when deleting a valid record" do
let(:dealer) { FactoryGirl.create(:dealer_with_stuff) }
before do
@user = FactoryGirl.build(:admin_user)
login_user
delete :destroy, :id => dealer.id
end
it { should assign_to(:dealer).with(dealer) }
it { should redirect_to(dealers_path) }
it { should set_the_flash }
it "is no longer active" do
dealer.active.should be_false
end
it "has no active users" do
dealer.users.each do |user|
user.active.should be_false
end
end
it "has no active leads" do
dealer.leads.each do |lead|
lead.active.should be_false
end
end
end
end
前 3 个测试通过,但后 3 个测试全部失败(奇怪的是,如果我在上面加上一个after ,user.active.should be_false
测试才会失败,但我们现在不要讨论这个问题)。因此,当我检查测试日志时,它会经历整个销毁过程,但随后会执行 a ,因此由于某种原因它不会保存任何记录;但它没有给我更多的信息。sleep(10)
delete :destroy
ROLLBACK
有人对此有任何想法吗?我已经尝试了我能想到的一切。