2011-01-26 65 views
0

我希望能夠專門爲開發和測試使用TestUser模型,它的行爲與我的普通用戶模型完全相同,只是它始終進行身份驗證。
這裏的關鍵問題是要有TestUser一直呼籲用戶類的方法,並期待它的類級實例變量,就好像是一個正常的用戶,並沒有做到這一點通過cattr_accessor即:使用普通的紅寶石對象委託ActiveRecord對象

class User 
    class << self 
    attr_accessor :foo 
    end 
end 

class TestUser ?< ?? 
    ?? 
end 

--- 
User.foo = 'bar' 
TestUser.foo => 'bar' 
User.new.authenticate?('password') => maybe, runs authentication 
TestUser.new.authenticate?(_) => true 

我知道我可以通過在測試和開發中將用戶擴展到始終進行身份驗證來做我想做的事情,但是我想知道是否可以使用該額外的類來完成此任務。

+0

這不一定是rails或activerecord問題,但是讓我感到的是,如果我將#create或#build從TestUser委派給用戶,那麼我無法正確地擴展創建的對象。 – lambdabutz 2011-01-26 22:57:53

回答

0

如果你不打算在生產中使用它,我不會浪費任何時間。

你有測試允許你「總是驗證用戶」,但爲什麼浪費時間在這個很好有問題,當你可以編碼實現你的最終目標時,讓它更快/更強/更好。不管你的目標是什麼。

+0

我試圖在評論中詳細說明這個問題的一般性,但你是對的,這不應該是一個展示塞或任何東西。我只是好奇你可以做多少與委託人,如果它可能基本上混淆了一類。也許本應該提出這個問題,而不是把它包裝在這個奇怪的例子中。 – lambdabutz 2011-01-27 14:21:09

0
class TestUser < User 
    def authenticate? 
    true 
    end 
end 

你真的應該使用測試/ rspec的,如果你只是測試你的代碼。

您可以使用:cattr_accessor :foo來訪問類變量。

+0

您描述的方式是我們如何爲單元測試設置它,我只是試圖保持示例簡單。部分問題是我試圖避免使用cattr_accessor,儘管我認爲這可能是一個真正有意義的情況,因爲我不在乎foo是向上還是向下傳播子類。 – lambdabutz 2011-01-27 14:19:09