2009-01-28 67 views
5

在開發和測試過程中,如果不變量被破壞,是否有內置的方式來指定Rails中的斷言,這會引發異常?從模型或控制器斷言Rails?

編輯:爲了清楚起見,我正在尋找可以放在模型或控制器中的斷言,而不是斷言您將用於單元測試。

回答

9

如果你正在編寫測試,有許多斷言函數。但是對於主代碼中的assertiona來說,沒有任何代碼,你可以很容易地推出自己的代碼。

添加這樣的事情environment.rb

class AssertFailure < Exception 
end 

def assert(message = 'assertion failed') 
    unless block_given? and yield 
    raise message 
    end 
end 

,並使它成爲一個無操作在environments/production.rb所以最小的開銷

def assert(message = 'assertion failed') 
end 

然後,在你的代碼,你可以斷言,以你心中的內容:

assert { value == expected_value } 
assert('value was not what was expected') { value == expected_value } 

如果value不等於expected_value並且您沒有在生產中運行,則會引發異常。

1

超越these,您的意思是?

+0

我相信OP在討論主代碼中的斷言,而不是測試斷言。 – 2009-01-28 22:22:56

+0

很難說,不是嗎? :) – 2009-01-28 22:52:23