2012-12-01 52 views
0

我有兩個型號:的Rails 3.2 RSpec的測試before_destroy鉤子失敗

class Region < ActiveRecord::Base 
    has_one :acol, :dependent => :nullify 
    before_destroy :check_acol_presence 
private 
    def check_acol_presence 
    if acol 
     errors.add(:base,"activerecord.errors.models.region.delete_with_existing_acol") 
     return false 
    end 
    end 
end 

class Acol < ActiveRecord::Base 
    belongs_to :region 
end 

我要檢查的RSpec測試 'check_acol_presence' 掛鉤。所以這裏是測試代碼:

region = FactoryGirl.create(:region) 
acol = FactoryGirl.create(:acol, :region => region) 
region.reload 
region.destroy 
lambda { region.reload }.should_not raise(ActiveRecord::RecordNotFound) 

在rails控制檯中這個檢查工作得很好。但測試失敗。爲什麼?

回答

2

嘗試把before_destroy前行HAS_ONE線

+0

舊的帖子,但它的工作將before_destroy提前has_many ...謝謝! – prodigerati

0

應該raise_error,不只是提高:

lambda { region.reload }.should_not raise_error(ActiveRecord::RecordNotFound) 

否則,你的測試本身可能是提高錯誤。