2011-01-26 64 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