2011-01-26 17 views
0

が、私はそれが常に認証していることを除いて、完全に私の通常のUserモデルと同じように働き、特に、開発とテストのためのTestUserモデルを持つことができるようにしたいオブジェクト。委任の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 

私が知っている私は:ここ
重要な問題は、TestUserは、常にユーザーのクラスメソッドを呼び出し、それが通常のユーザであるかのように、それのクラスレベルのインスタンス変数を検索し、cattr_accessorすなわちを通じてそれをしないことですテストと開発のユーザーを常に認証するように拡張するだけで、私が望むことができましたが、余分なクラスでそれを行うことが可能かどうかは疑問でした。

+0

これは必ずしもレールまたはActiveRecordの問題ではありませんが、私を取得しているものは、私は、ユーザーにTESTUSERから#createまたは#buildを委任する場合は、その後、私は適切に作成されたオブジェクトを拡張できませんよということです。 – lambdabutz

答えて

0

本番でそれを使用しない場合、私は、この上の任意の時間を無駄にしないでしょう。

「常にユーザーを認証する」というテストがありますが、最終目標に向かってコーディングすることができたときに、このniceの時間を無駄にするのはなぜですか?あなたの目標が何であれ。

+0

これはショーストッパーか何かすべきではない、私は詳細にコメントでこの問題の一般性を試してみましたが、あなたは正しいです。私は、委譲者がどれほど多くのことを行うことができるのか、本質的にクラスをエイリアスすることができるのかどうか不思議です。おそらく、この奇妙な例でそれを包み込むのではなく、私の質問をしたはずです。 – lambdabutz

0
class TestUser < User 
    def authenticate? 
    true 
    end 
end 

しかしあなたは自分のコードをテストしている場合は、あなたが本当に使用テスト/ RSpecのをすべきです。

そして、あなたが使用することができます:cattr_accessor :fooクラス変数にアクセスするため。

+0

あなたが記述した方法は、私たちが単体テストのためにセットアップする方法です。私は単なる例を単純にしようとしていました。私は、これはfooがアップ伝播またはサブクラスダウン場合、私は本当に気にしないので、それは実際には、理にかなっている場合であるかもしれないと考えているものの、問題の一部は、私がcattr_accessorの使用を回避しようとしていたということでした。 – lambdabutz