Ruby on rails 3 控制器测试失败的销毁方法

Ruby on rails 3 控制器测试失败的销毁方法,ruby-on-rails-3,rspec,factory-bot,Ruby On Rails 3,Rspec,Factory Bot,我在测试destroy方法时遇到了一个奇怪的问题。我用的是FactoryGirl和Rspec 下面我们来看看这个有问题的方法。正如您所看到的,它实际上并没有破坏经销商,只需将它和它的从属对象的active属性设置为false: 经销商(u controller.rb) def destroy @dealer = Dealer.find(params[:id]) @dealer.active = false @dealer.save! @dealer.leads.each { |l

我在测试
destroy
方法时遇到了一个奇怪的问题。我用的是FactoryGirl和Rspec

下面我们来看看这个有问题的方法。正如您所看到的,它实际上并没有破坏经销商,只需将它和它的从属对象的
active
属性设置为
false

经销商(u controller.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个全部失败(奇怪的是,
user.active.should\u false
测试只有在我将
sleep(10)
置于
delete:destroy
之后才会失败,但现在我们不要讨论这个问题)。因此,当我检查测试日志时,它会经历整个销毁过程,但随后会执行
回滚
,因此出于某种原因,它不会保存任何记录;但是它没有给我更多的信息


有人对此有什么想法吗?我已经尝试了我能想到的一切。

如果你重新加载
经销商怎么办?测试中的
经销商
与控制器中的
@经销商
对象不同(ActiveRecord不进行身份映射)

在做之前
@user=FactoryGirl.build(:admin\u user)
登录用户
删除:destroy,:id=>dealer.id
加油#
before do
  @user = FactoryGirl.build(:admin_user)
  login_user  
  delete :destroy, :id => dealer.id
  dealer.reload # << add this
end