0
我遇到了一個測試destroy
方法的奇怪問題。我正在使用FactoryGirl和Rspec。銷燬方法在控制器測試中失敗
下面看看有關的方法。正如你所看到的,實際上它並不破壞的經銷商,只需設置它和它的依賴對象的active
屬性false
:
dealers_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
當我運行在它的應用這種方法正是它應該做的。現在,進行測試。
dealers_controller_spec.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 be_false
只測試一個失敗後sleep(10)
了delete :destroy
以上,但讓我們不要成問題現在)。所以當我檢查測試日誌時,它會經歷整個銷燬過程,但是會執行一個ROLLBACK
,所以出於某種原因它不會保存任何記錄;但它並沒有給我更多的信息。
有沒有人對此有任何想法?我試過了我可能想到的一切。