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