destroy
メソッドのテストで奇妙な問題が発生しています。FactoryGirlとRspecを使用しています。
問題のメソッドを見てみましょう。ご覧のとおり、実際にはディーラーを破壊するのではなく、設定するだけで、依存オブジェクトのactive
属性は次のようになりfalse
ます。
ディーラー_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
このメソッドをアプリケーションで実行すると、実行する必要があることを正確に実行します。さて、テストに移りましょう。
ディーラー_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
誰かがこれについて何か考えを持っていますか?私は考えられるすべてのことを試しました。